我有一个包含ConcurrentHashMap
和ConcurrentLinkedList
等数据结构的多线程程序,但是我还需要每个线程来访问共享整数值。线程本身是我已经制作的扩展类Thread
的自定义线程类。我的两个问题是:
如何让每个线程看到相同的整数值?我不认为原始的int会起作用,因为它不会被引用通过" (或者更确切地说是通过对象指针的值传递)。整数需要是可变的,并且所有其他线程需要看到线程对一个整数的任何更改。使用整数对象会修复此问题,AtomicInteger
我应该使用什么来保护线程安全?每个线程都会在每次运行循环时检查整数,但是当线程完成它的任务并且即将返回时它会更改整数。
提前致谢!
答案 0 :(得分:7)
您应该使用AtomicInteger
。
AtomicInteger
是一个相当低级的原语。我会质疑设计。您是否考虑过使用ExecutorService
,Callable
,Futures
,Semaphore
,CountDownLatch
,Fork/Join框架或其他高级别{{ 1}} API?
答案 1 :(得分:1)
您可以使用AtomicInteger。它支持许多原子操作。对于例如addAndGet
,decrementAndGet
等.AtomicInteger确实扩展了Number,因此您可以将其传递给基于数字的类操作的方法。
答案 2 :(得分:1)
使用AtomicInteger
。我建议你让它成为最终版,然后在AtomicInteger上使用操作,例如incrementAndGet