Java 原子布尔和同步块有什么区别
我试图理解以下两个代码块之间的区别Java 原子布尔和同步块有什么区别,java,concurrency,synchronization,boolean,atomicity,Java,Concurrency,Synchronization,Boolean,Atomicity,我试图理解以下两个代码块之间的区别 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) {
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;
}
}
我需要线程保护一个布尔值,仅此而已,并且
过去使用的是后来的方法,但想开始使用原子
对象,(如果)它们是安全的?,如果您要做的只是获取和设置单个布尔值原子化,那么是的-您可以使用原子布尔值,而无需任何同步
当然,synchronized
允许更广泛的使用,例如在块内执行多个操作而不丢失锁,或者将其用于等待/通知。因此,这不像原子布尔是同步的一般替代方法,但在本例中,您可以使用它来代替同步。有一些细微的区别,但从外部看,这两个代码片段的行为类似:如果调用set
方法,随后调用get
的其他线程将看到该更改
主要区别在于:
- 性能:根据争用级别的不同,使用
synchronized
或AtomicBoolean
- 原子性:如果在某个阶段您想做的不仅仅是设置布尔值,那么
synchronized
块将允许您以原子方式添加指令,但AtomicBoolean
不会
那么。。。阅读原子布尔的javadoc?它描述了提供的保证以及与同步相比的优势。请让我看一下java文档,它“清楚地”解释了一种方法相对于另一种方法的优势。我在查看javadoc的包java.util.concurrent.atomic
中找不到它: