DEV Community

Suspendendo, retomando e encerrando threads

Métodos obsoletos: suspend(), resume() e stop() da classe Thread foram substituídos em Java 2.

final void resume( )
final void suspend( )
final void stop( )

Problemas causados:
suspend(): podia causar deadlock.
resume(): não podia ser usado sem suspend().
stop(): causava falhas graves na execução de threads.

Alternativa moderna: Usar variáveis de controle (flags) dentro do método run() para:
Suspensão: Flag configurada como "suspender" faz a thread pausar.
Retomada: Flag configurada como "em execução" faz a thread continuar.
Encerramento: Flag configurada como "encerrar" faz a thread terminar.

Image description

Image description

Image description

Variáveis de controle:
suspended: controla a suspensão da thread. Inicializada como false.
stopped: controla o encerramento da thread. Inicializada como false.

Método run():
Contém um bloco synchronized que verifica a variável suspended.
Se suspended for true, o método wait() é chamado para suspender a thread.

Suspensão da thread:
Para suspender, chama-se o método mysuspend(), que configura suspended como true.

Retomada da thread:
Para retomar, chama-se o método myresume(), que configura suspended como false e chama notify().

Encerramento da thread:
Para encerrar, chama-se o método mystop(), que configura stopped como true.
mystop() também configura suspended como false e chama notify() para garantir que a thread suspensa seja corretamente encerrada.

Top comments (0)