在Java中的多个线程之间共享int或整数对象

时间:2014-12-22 21:57:41

标签: java multithreading algorithm concurrency

我有一个包含ConcurrentHashMapConcurrentLinkedList等数据结构的多线程程序,但是我还需要每个线程来访问共享整数值。线程本身是我已经制作的扩展类Thread的自定义线程类。我的两个问题是:

  • 如何让每个线程看到相同的整数值?我不认为原始的int会起作用,因为它不会被引用通过" (或者更确切地说是通过对象指针的值传递)。整数需要是可变的,并且所有其他线程需要看到线程对一个整数的任何更改。使用整数对象会修复此问题,AtomicInteger

  • 怎么办?
  • 我应该使用什么来保护线程安全?每个线程都会在每次运行循环时检查整数,但是当线程完成它的任务并且即将返回时它会更改整数。

提前致谢!

3 个答案:

答案 0 :(得分:7)

您应该使用AtomicInteger

然而,我会认为AtomicInteger是一个相当低级的原语。我会质疑设计。您是否考虑过使用ExecutorServiceCallableFuturesSemaphoreCountDownLatchFork/Join框架或其他高级别{{ 1}} API?

答案 1 :(得分:1)

您可以使用AtomicInteger。它支持许多原子操作。对于例如addAndGetdecrementAndGet等.AtomicInteger确实扩展了Number,因此您可以将其传递给基于数字的类操作的方法。

答案 2 :(得分:1)

使用AtomicInteger。我建议你让它成为最终版,然后在AtomicInteger上使用操作,例如incrementAndGet