Class methods Methods that can be invoked from untrusted code to modify a static
field must synchronize access to that field. This is necessary because there is no guarantee that untrusted clients will externally synchronize when accessing the field. Because a static
field is shared by all clients, untrusted clients may violate the contract by failing to provide suitable locking.
...
If a method modifies a static field, you must synchronize access to this field, even if the method is typically used only by a single thread. It is not possible for clients to perform external synchronization on such a method because there can be no guarantee that unrelated clients will do likewise.
This guideline also applies to classes that explicitly document their lack of thread-safety. Documented Documenting design intent is irrelevant when dealing with untrusted code because an attacker can always chose to ignore the documentation.
...
This class definition does not violate CON01-J. Ensure that compound operations on shared variables are atomic which only applies to classes that promise thread-safety. However, this class has a mutable static field counter
that is modified by the publicly accessible incrementCounter()
method. Consequently, this class cannot be securely used by trusted client code if untrusted client code that may (can purposely ) fail to externally synchronize access to the field.
...