我有一个要求,我需要在完成后发布'n'个线程的结果。为了检查是否所有线程都已完成,我使用的是AtomicInteger(incrementAndGet())并将其值与最终变量进行比较。在进行检查之前,我正在将单个线程的结果写入共享对象(到并发哈希映射,因为非同步数据结构dint似乎是足够的)。所以,我的问题是,在我的计数器通过'if'条件之前,所有线程是否都会完成写入共享对象(并且主线程能够看到一致的内存)吗?
以下是示例代码:
public void run(){
//Values is a concurrent hashMap.
values.put(Thread.currentThread().getName(), Thread.currentThread().getName());
if(counter.incrementAndGet() == 5) {
//Do something
}
}
答案 0 :(得分:2)
请参阅java.util.concurrent.atomic
的{{3}}:
访问和更新原子的记忆效应通常遵循挥发性规则,如package summary中所述:
get
具有读取volatile
变量的记忆效应。set
具有写入(分配)volatile
变量的记忆效应。
incrementAndGet()
包含set和get操作,这意味着你有一个完整的发生在边缘。