Dalla terminazione insicura dei thread alla cancellazione cooperativa
Sostituisci Thread.stop() e i flag condivisi improvvisati con una cancellazione dei task consapevole delle interruzioni.
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 gli invarianti
I task si fermano solo nei percorsi di codice progettati per la cancellazione.
Controllo standard
Future rappresenta insieme esecuzione, completamento e cancellazione.
Componibile
L'interruzione funziona con code bloccanti, lock, executor e thread virtuali.
Future ed ExecutorService sono disponibili da JDK 5 (sett. 2004).
Thread.stop() può terminare il codice mentre possiede monitor o sta aggiornando uno stato condiviso, lasciando oggetti danneggiati. La cancellazione moderna è cooperativa. Cancella il Future con interruzione, propaga InterruptedException dove possibile, ripristina lo stato di interruzione quando non può essere propagato, e progetta il task per raggiungere punti di cancellazione sicuri.