Middle
Java'da interrupted() ve isInterrupted() metodları arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
isInterrupted() şu anki akışın kesinti bayrağının ayarlandığını kontrol eder, sıfırlamadan.
interrupted() şu anki akışın kesinti bayrağının ayarlandığını kontrol eder ve kontrol sonrası onu sıfırlar, eğer ayarlanmışsa. Bu yöntem static'dir.
Örnek:
// Bir akış oluşturuyoruz
Thread t = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
// Faydalı işler yap
}
System.out.println("Akış kesildi.");
});
// Akışı başlat
t.start();
// Akışı kes
t.interrupt();
// isInterrupted() ile interrupt() sonrası bayrak durumunu kontrol et
System.out.println("isInterrupted() sonrası interrupt(): " + t.isInterrupted()); // true olmalı
try {
// Akışın bitmesini bekle (bu durumda hızlı biter)
t.join();
} catch (InterruptedException e) {
// join() kesilirse kesinti bayrağını geri yükle
Thread.currentThread().interrupt();
}
// interrupted() ile interrupt() sonrası bayrak durumunu başka bir akıştan kontrol et!
// Dikkat: interrupted()'yi başka bir akıştan çağırmak anlamlı değildir,
// çünkü interrupted() çağıran akışın bayrağıyla çalışır.
// Demonstrasyon için, onu kesilen akıştan çağırmak gerekir.
// Başka bir akışta interrupted() çağrısı (t ile ilgisi yok)
System.out.println("interrupted() şu anki akıştan: " + Thread.interrupted()); // false olmalı (şu anki akış kesilmemişse)
Ana fark:
| Yöntem | Kesinti bayrağı sıfırlanır mı? | Yöntem tipi |
|---|---|---|
isInterrupted() |
Hayır | Nesneye özgü |
interrupted() |
Evet | Statik |