Concurrency Avançado

Encerramento inseguro de threads para cancelamento cooperativo

Substitua Thread.stop() e flags compartilhadas improvisadas por cancelamento de tarefas consciente de interrupção.

✕ Forced thread termination
Thread worker = new Thread(this::runTask);
worker.start();

// May stop the thread while shared state is inconsistent.
worker.stop();
✓ Future cancellation
Future<?> worker = executor.submit(this::runTask);

// Requests interruption; the task must cooperate.
worker.cancel(true);
Viu um problema com este código? Nos avise.
🛡

Preserva invariantes

As tarefas param apenas em caminhos de código projetados para cancelamento.

🧩

Controle padrão

Future representa execução, conclusão e cancelamento em conjunto.

🔗

Composição

A interrupção funciona com filas bloqueantes, locks, executors e threads virtuais.

Abordagem Antiga
Thread.stop()
Abordagem Moderna
Future.cancel(true)
Desde o JDK
5
Dificuldade
Avançado
Encerramento inseguro de threads para cancelamento cooperativo
Disponível

Future e ExecutorService estão disponíveis desde o JDK 5 (set. 2004).

Thread.stop() pode encerrar o código enquanto ele detém monitores ou está atualizando estado compartilhado, deixando objetos danificados. O cancelamento moderno é cooperativo. Cancele o Future com interrupção, propague InterruptedException quando possível, restaure o status de interrupção quando não puder ser propagado, e projete a tarefa para alcançar pontos seguros de cancelamento.