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...
            }
        }
    }