Sobes.tech
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