[英]Sharing an int or an integer object between multiple threads in Java
我有一个多线程程序,包括ConcurrentHashMap
和ConcurrentLinkedList
等数据结构,但我还需要每个线程访问共享整数值。 线程本身是我自己做的扩展类Thread
自定义线程类。 我的两个问题是:
如何让每个线程看到相同的整数值? 我不认为原始int会起作用,因为它不会“通过引用传递”(或者更确切地说是通过对象指针的值传递)。 整数需要是可变的,并且所有其他线程需要看到线程对一个整数的任何更改。 使用整数对象修复此问题, AtomicInteger
怎么样?
我应该用什么来保护线程安全? 每个线程都会在每次运行循环时检查整数,但是当线程完成任务并即将返回时,它将更改整数。
提前致谢!
您应该使用AtomicInteger
。
然而,我会认为AtomicInteger
是一个相当低级的原语。 我会质疑设计。 您是否考虑过使用ExecutorService
, Callable
, Futures
, Semaphore
, CountDownLatch
, Fork / Join框架或高级java.util.concurrent
API中的其他类?
您可以使用AtomicInteger 。 它支持许多原子操作。 例如addAndGet
, decrementAndGet
等addAndGet
确实扩展了Number,因此您可以将它传递给在基于数字的类上运行的方法。
使用AtomicInteger
。 我建议你把它作为final,然后在AtomicInteger上使用诸如incrementAndGet
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.