getClass()
同期を含むクラスがサブクラス化されている場合、そのサブクラスは異なるクラスオブジェクトに同期します。 通常、getClass() の呼び出しは String.class などのクラスリテラル式に置換できます。 さらに良い解決策は、アクセスを完全に制御できる private static final ロックオブジェクトに同期することです。
String.class
private static final
例:
synchronized(getClass()) {}