Pausando uma thread
A maneira apropriada para pausar temporariamente a execução de uma thread é ajustar uma variável que a thread a ser pausada verifique ocasionalmente. Quando a thread alvo detecta que a variável está ajustada, esta thread chama Object.wait(). A thread pausada pode então ser acordada chamando seu método Object.notify().
Importante: Thread.suspend() e Thread.resume() são os métodos para pausar uma thread. Entretanto, estes métodos são muito inseguros. Usá-los resulta frequentemente em deadlocks. Com os métodos apresentados no parágrafo acima, a thread a ser pausada pode assegurar-se de que está pausada em um lugar apropriado.
// Cria e inicia a thread
MyThread thread = new MyThread();
thread.start();
while (true) {
// processamento...
// Pausa a thread
synchronized (thread) {
thread.pleaseWait = true;
}
// processamento...
// Reinicia a thread
synchronized (thread) {
thread.pleaseWait = false;
thread.notify();
}
// processamento...
}
class MyThread extends Thread {
boolean pleaseWait = false;
// Este método é chamando quando a thread é iniciada
public void run() {
while (true) {
// processamento...
// Verifica se a thread deve esperar
synchronized (this) {
while (pleaseWait) {
try {
wait();
} catch (Exception e) {
}
}
}
// processamento...
}
}
}