A condition identifies a change of state in the application. It is a synchronization mechanism where a thread waits for a specific condition and another thread notifies that this condition has taken place.
Once the condition takes place, the thread acquires the lock in order to get exclusive access to the shared resource.