...
Any thread can modify the field's value to refer to some other object in the presence of an accessor such as setLock()
. This might cause two threads that intend to lock on the same object to lock on different objects, enabling them to execute the two critical sections in an unsafe manner. For example, if one thread is in its critical section and the lock is changed, a second thread will lock on the new reference instead of the old one.
A class that provides no does not provide any accessible methods to change the lock is secure against untrusted manipulation, however, it is susceptible to inadvertent modification by the programmer. For maintainability reasons, eliminating the accessor method (which is presumably needed for other reasons) is not the preferred solution.
...