このコードは、明らかに共有されていない Integer
のようなボクシングされたプリミティブ型で同期化しています。
private static final Integer fileLock = new Integer(1); synchronized(fileLock) { .. do something .. }
このコードは、 fileLock を以下のように宣言するとより良くなります。
private static final Object fileLock = new Object();
既存のコードとしては間違っていないのかもしれませんが、紛らわしいので将来リファクタリングするべきかもしれません。
たとえば、IntelliJ の "Remove Boxing" のようなリファクタリングは Java 仮想マシンを通して共有される正準化された Integer
オブジェクトを使用するように置き換えてしまい、非常に紛らわしい振る舞いと潜在的デッドロックの原因になります。