Condition

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.

Métodos

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.

Exemplo

Object obj;
ReentrantLock l;
Condition cond = l.newCondition();

4.pdf

Código do guião