Permitem que threads suspendam/retomem a sua execução dentro de secções críticas, de acordo com uma dada condição.
Estão associadas a um lock, logo é necessário obter o lock antes de utilizar a variável de condição.
A condição deve ser testada sempre com while, para impedir situações inesperadas causadas por interrupções.
Condition() // Construtor
await() // Thread atual fica em espera até que seja notificada para retomar execução
// Na sua invocação o lock é libertado atomicamente e a execução da thread é suspendida
signal() // Notifica uma thread para resumir a sua execução
signalAll() // Notifica todas as threads para resumirem a sua execução
// Na sua invocação todas as therads em espera acordam e competem pelo locl.
// A thread que o adquire, faz lock e resume a sua execução
Uma variável de condição está intrinsecamente ligada a um Lock.
Object obj;
ReentrantLock l;
Condition cond = l.newCondition();