This happens when a method or function, designed to run in a multi-threaded environment, accesses or modifies a non-final static variable or class member. Because the static element is not final, its state can be changed unexpectedly by concurrent threads, leading to race conditions and unpredictable behavior.
In a multi-threaded application, static variables are shared across all instances and threads. When a non-final static member is modified by multiple threads calling the same method simultaneously, the operations can interleave unpredictably. One thread might read a value while another is halfway through updating it, corrupting data and causing logic errors that are difficult to reproduce and debug. This unreliability directly undermines the stability of the application. If an attacker can trigger or influence these concurrent execution paths, they might exploit the resulting race condition to cause a denial of service, bypass security checks, or manipulate application logic for unauthorized access or data corruption.
Impact: Reduce Reliability