考虑两个不能同时执行的方法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块上旋转?

10-06 01:36