考虑两个不能同时执行的方法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
你会忙着等待。
两者都将确保一次只有一个线程执行该 block ,但是您想让 CPU 在 while block 上旋转吗?
关于java - AtomicBoolean 的这种使用是同步块(synchronized block)的有效替代吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25038919/