Güvenli olmayan iş parçacığı sonlandırmadan işbirlikçi iptale
Thread.stop() ve geçici paylaşılan bayrakları, kesintiye duyarlı görev iptaliyle değiştirin.
Kod Karşılaştırması
✕ 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);
Bu kodda bir sorun mu gördünüz? Bize bildirin.
Modern yöntem neden daha iyi
Değişmezleri korur
Görevler yalnızca iptal için tasarlanmış kod yollarında durur.
Standart kontrol
Future, yürütmeyi, tamamlanmayı ve iptali birlikte temsil eder.
Bileşenlenebilir
Kesinti, engelleyen kuyruklar, kilitler, executor'lar ve sanal iş parçacıklarıyla çalışır.
Eski Yaklaşım
Thread.stop()
Modern Yaklaşım
Future.cancel(true)
JDK'dan itibaren
5
Zorluk
İleri
JDK Desteği
Güvenli olmayan iş parçacığı sonlandırmadan işbirlikçi iptale
Mevcut
Future ve ExecutorService JDK 5'ten (Eylül 2004) beri kullanılabilir.
Nasıl çalışır
Thread.stop(), monitörlere sahipken veya paylaşılan durumu güncellerken kodu sonlandırabilir ve nesneleri hasarlı bırakabilir. Modern iptal işbirlikçidir. Future'ı kesinti ile iptal edin, mümkün olduğunda InterruptedException'ı yayın, yayılamadığında kesinti durumunu geri yükleyin ve görevi güvenli iptal noktalarına ulaşacak şekilde tasarlayın.
İlgili Belgeler
Kanıt