Concurrency Avanzato

Dalla terminazione insicura dei thread alla cancellazione cooperativa

Sostituisci Thread.stop() e i flag condivisi improvvisati con una cancellazione dei task consapevole delle interruzioni.

✕ 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);
Vedi un problema con questo codice? Faccelo sapere.
🛡

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.

Approccio Vecchio
Thread.stop()
Approccio Moderno
Future.cancel(true)
Dal JDK
5
Difficoltà
Avanzato
Dalla terminazione insicura dei thread alla cancellazione cooperativa
Disponibile

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.