Javaマルチスレッドのサンプルコード説明などを見ると、以下のようなカウンタクラス(Count)において、
カウンタの値(count)を スレッドセーフにするには、 countUp()をsyncronized宣言する。もしくは、
countUpメソッドの内部をsyncronizedブロックで囲むといった 説明がされているように思います。

public class Counter {
 public static int count;
 public static void countUp() {
 int n = count;
 何らかの処理;
 count = n + 1;
 }
}

たしかに、上記を1000スレッドから実行し、実行後のcountの値を参照すると、期待される結果(1000)
では無く、もっと少ない値が返されます。
同期処理の定跡に従って、countUpをsyncronized宣言すると、最終的なcountは1000になってくれるので、
それはそれで良いのですが、一方で、 加算処理をインクリメント演算子に書き換えると、syncronized
宣言するまでもなく、countは期待通りに1000になってくれます。

public class Counter {
 public static int count;
 public static void countUp() {
  ++count;
 }
}

インクリメント演算子の実態は、count = count + 1 といった処理なのだと思いますが、このような1行処理であれば、
syncronizedを宣言するまでも無く、スレッドセーフになってしまうものなのでしょうか?