Encerramento inseguro de threads para cancelamento cooperativo
Substitua Thread.stop() e flags compartilhadas improvisadas por cancelamento de tarefas consciente de interrupção.
Thread worker = new Thread(this::runTask); worker.start(); // May stop the thread while shared state is inconsistent. worker.stop();
Future<?> worker = executor.submit(this::runTask); // Requests interruption; the task must cooperate. worker.cancel(true);
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.
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.