Dlaczego synchronizacja na poziomie boolowskim nie jest dobrą praktyką?

Mój architekt zawsze tak mówi

Nigdy nie synchronizuj w Boolean

Nie jestem w stanie zrozumieć przyczyny i naprawdę byłbym wdzięczny, gdyby ktoś mógł wyjaśnić na przykładzie, dlaczego nie jest to dobra praktyka.Kod referencyjny

<code>private Boolean isOn = false;
private String statusMessage = "I'm off";
public void doSomeStuffAndToggleTheThing(){

   // Do some stuff
   synchronized(isOn){
      if(isOn){
         isOn = false;
         statusMessage = "I'm off";
         // Do everything else to turn the thing off
      } else {
         isOn = true;
         statusMessage = "I'm on";
         // Do everything else to turn the thing on
      }
   }
}
</code>

questionAnswers(4)

yourAnswerToTheQuestion