考虑两个不能同时执行的方法a()和b()。
同步的关键字可用于实现此目的,如下所示。我可以按照下面的代码使用AtomicBoolean达到相同的效果吗?
final class SynchonizedAB {
synchronized void a(){
// code to execute
}
synchronized void b(){
// code to execute
}
}
尝试使用AtomicBoolean获得与上述相同的效果:
final class AtomicAB {
private AtomicBoolean atomicBoolean = new AtomicBoolean();
void a(){
while(!atomicBoolean.compareAndSet(false,true){
}
// code to execute
atomicBoolean.set(false);
}
void b(){
while(!atomicBoolean.compareAndSet(false,true){
}
// code to execute
atomicBoolean.set(false);
}
}
最佳答案
不会,因为synchronized
将阻止,而使用AtomicBoolean
时,您将忙于等待。
两者都将确保每次只有一个线程来执行该块,但是您是否想让CPU在while块上旋转?