[英]AtomicBoolean vs Synchronized block, whats the difference
我试图理解以下两个代码块之间的区别
AtomicBoolean ab = new AtomicBoolean(false);
using the following to get and set state. .
ab.get();
ab.set(X);
vs.
private boolean ab = false;
private final Object myboollock = new Ojbect();
public void setAB(boolean state)
{
synchronized(myboollock)
{
ab = state;
}
}
public boolean getAB()
{
synchronized(myboollock)
{
return ab;
}
}
我需要线程保护布尔值,这就是全部,并且过去使用过后面的方法,但是想开始使用Atomic对象,(如果)它们是安全的吗?
如果你正在试图做的一切就是让获取和设置一个boolean
值原子,然后是-你可以使用AtomicBoolean
,而不是没有任何同步。
当然, synchronized
允许更广泛的用途,例如在块内执行多个操作而不会丢失锁定,或者将其用于等待/通知。 因此,它不像AtomicBoolean
是同步的一般替代品 - 但在这种情况下,您可以使用它而不是同步。
有一些细微的差别,但从外部看,两个代码片段的行为类似:如果你调用set
方法,那么随后调用get
其他线程可以看到更改。
主要区别是:
synchronized
或AtomicBoolean
可以获得更好的性能 synchronized
块将允许你以原子方式添加指令,但AtomicBoolean
不会
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.