Reports synchronization on this or class expressions. Constructs reported include synchronized blocks, and calls to wait(), notify() or notifyAll().

There are several reasons synchronization on this or class expressions may be a bad idea: First, it makes synchronization part of the external interface of the class. This makes a future change to a different locking mechanism difficult. Second, it makes it hard to track just who is locking on a given object. And third , it makes a denial-of-service attack possible, either on purpose or it can happen easily by accident when subclassing.

As an alternative, consider synchronizing on a private final lock object, access to which can be completely controlled.