【发布时间】:2012-12-29 14:22:06
【问题描述】:
我知道volatile 允许可见性,AtomicInteger 允许原子性。
那么如果我使用 volatile AtomicInteger,是否意味着我不必再使用任何同步机制?
例如。
class A {
private volatile AtomicInteger count;
void someMethod(){
// do something
if(count.get() < 10) {
count.incrementAndGet();
}
}
这是线程安全的吗?
【问题讨论】:
-
这里的“线程安全”是什么意思?不能保证上面的代码意味着
count永远不会超过10,例如——多个线程可以调用intValue(),然后全部调用incrementAndGet()。 -
没错,这会起作用吗? if(count.get()
-
在您提出要求之前,我无法回答什么会“有效”。会编译吗?是的。它会避免任何增量丢失吗?是的。它会做你想做的事吗?我说不出来。
-
我的意思是线程安全的?这意味着它不会丢失更新吗?
-
是的 - 但您最终可能会得到大于 10 的计数。
标签: java multithreading thread-safety atomic volatile