【发布时间】:2017-05-26 00:01:41
【问题描述】:
我有一个要求,我需要在完成后发布“n”个线程的结果。为了检查所有线程是否已完成,我使用了 AtomicInteger (incrementAndGet()) 并将其值与最终变量进行比较。在进行检查之前,我将各个线程的结果写入共享对象(写入并发哈希图中,因为非同步数据结构似乎就足够了)。所以,我的问题是,在我的计数器通过“if”条件之前,所有线程是否都会完成对共享对象的写入(并且主线程是否能够看到一致的内存)?
这里是示例代码:
公共无效运行(){
//Values is a concurrent hashMap.
values.put(Thread.currentThread().getName(), Thread.currentThread().getName());
if(counter.incrementAndGet() == 5) {
//Do something
}
}
【问题讨论】:
-
你为什么不使用
CountDownLatch? -
不想要任何等待线程。会将计数器对象作为监视器传递给所有正在执行的线程。
-
使用一时不必阻塞线程:
getCount()返回当前计数。仅await ()块。
标签: java concurrency java-memory-model compare-and-swap