Javaのすべてのオブジェクトにはモニター(モニターロック)があり、同期によってロックされたコードに対してスレッドが実行されると、モニターロックを取得しようとします(monitorenter命令を実行します)。
取得した場合、ロックのカウンタが1つ増加します(初期値は0です)他のスレッドがロックを取得したい場合は、前のスレッドが監視ロックを解除する(monitorexit命令を実行する)までブロックされます。
ロックの取得と解放を同期する作業はJVMによって行われ、私たちが自分で行う必要はありません。
関連する知識:https://www.cnblogs.com/lycroseup/p/7486860.html