我有一个需求,我需要在完成时发布'n'个线程的结果。为了检查所有线程是否完成,我使用AtomicInteger(incrementAndGet())并将其值与最终变量进行比较。在做检查之前,我正在将单个线程的结果写入共享对象(并发哈希表,因为非同步数据结构dint似乎足够了)。所以,我的问题是,在我的计数器通过'if'条件之前,所有线程是否会完整写入共享对象(并且主线程是否能够看到一致的内存)?原子变量是否能保证 - “发生在关系之前”?
这里的示例代码:
公共无效的run(){
//Values is a concurrent hashMap.
values.put(Thread.currentThread().getName(), Thread.currentThread().getName());
if(counter.incrementAndGet() == 5) {
//Do something
}
}
为什么不使用'CountDownLatch'? – Bohemian
不想要任何等待的线程。将计数器对象作为监视器传递给所有正在执行的线程。 – V1666
在使用一个时不必阻塞线程:'getCount()'返回当前计数。只有'await()'块。 – Bohemian