AtomicBoolean vs Synchronized 块,有什么区别
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
对象,(如果)它们是安全的?,
如果 all 您尝试做的是获取和设置单个 boolean
值原子,那么是的 - 您可以改用 AtomicBoolean
没有任何同步。
当然,synchronized
允许更广泛的用途,例如在块内执行多个操作而不会丢失锁,或者将其用于wait/notify。所以它不像 AtomicBoolean
是同步的 一般 替代品 - 但在这种情况下,您可以使用它而不是同步。
有一些细微差别,但从外部看,这两个代码片段的行为相似:如果您调用 set
方法,则更改将对随后调用 get
的其他线程可见。
主要区别是:
- 性能:根据竞争程度,使用
synchronized
或 AtomicBoolean
可能会获得更好的性能
- 原子性:如果在某个阶段你想做的不仅仅是设置布尔值,
synchronized
块将允许你以原子方式添加指令,但 AtomicBoolean
不会
我正在尝试了解以下两个代码块之间的区别
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 对象,(如果)它们是安全的?,
如果 all 您尝试做的是获取和设置单个 boolean
值原子,那么是的 - 您可以改用 AtomicBoolean
没有任何同步。
当然,synchronized
允许更广泛的用途,例如在块内执行多个操作而不会丢失锁,或者将其用于wait/notify。所以它不像 AtomicBoolean
是同步的 一般 替代品 - 但在这种情况下,您可以使用它而不是同步。
有一些细微差别,但从外部看,这两个代码片段的行为相似:如果您调用 set
方法,则更改将对随后调用 get
的其他线程可见。
主要区别是:
- 性能:根据竞争程度,使用
synchronized
或AtomicBoolean
可能会获得更好的性能
- 原子性:如果在某个阶段你想做的不仅仅是设置布尔值,
synchronized
块将允许你以原子方式添加指令,但AtomicBoolean
不会