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

Kod*_*e47 2 java algorithm concurrency multithreading

我有一个多线程程序,其包括数据结构等等ConcurrentHashMapConcurrentLinkedList,但是我还需要每个线程访问共享整数值.线程本身是我做的扩展类的自定义线程类Thread.我的两个问题是:

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

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

提前致谢!

aio*_*obe 7

你应该使用一个AtomicInteger.

然而,我会认为这AtomicInteger是一个相当低级的原语.我会质疑设计.你有没有考虑使用ExecutorService,Callable,Futures,Semaphore,CountDownLatch,在叉/加入从高层次的框架或其他类的java.util.concurrentAPI?

  • volatile int对于像"flag"这样的东西可以正常工作,但即使是"x ++"也不会在没有同步的情况下可靠地工作.AtomicInteger是一种解决这些问题的方法. (5认同)