Sobes.tech
Middle

Java'da interrupted() va isInterrupted() metodlari orasidagi farq nima?

sobes.tech AI

AIdan javob

isInterrupted() hozirgi oqimda to‘xtatish bayrog‘ining o‘rnatilganligini tekshiradi, uni o‘chirib yubormasdan.

interrupted() hozirgi oqimda to‘xtatish bayrog‘ining o‘rnatilganligini tekshiradi va uni o‘chirib yuboradi so‘rovdan so‘ng, agar u o‘rnatilgan bo‘lsa. Bu metod static.

Misol:

// Oqim yaratamiz
Thread t = new Thread(() -> {
    while (!Thread.currentThread().isInterrupted()) {
        // Foydali ishlarni bajarish
    }
    System.out.println("Oqim to‘xtatildi.");
});

// Oqimni ishga tushiramiz
t.start();

// Oqimni to‘xtatamiz
t.interrupt();

// isInterrupted() bilan interrupt()dan keyingi bayroq holatini tekshirish
System.out.println("isInterrupted() dan keyin interrupt(): " + t.isInterrupted()); // true bo‘lishi kerak

try {
    // Oqim tugashini kutamiz (bu holatda, tez tugaydi)
    t.join();
} catch (InterruptedException e) {
    // join() to‘xtatilgan bo‘lsa, to‘xtatish bayrog‘ini tiklaymiz
    Thread.currentThread().interrupt();
}

// interrupted() bilan interrupt()dan keyingi bayroq holatini boshqa oqimdan tekshirish!
// Eslatma: interrupted() ni boshqa oqimdan chaqirish mantiqiy emas,
// chunki u chaqirayotgan oqimning bayrog‘i bilan ishlaydi.
// Interrupted() ning ishlashini ko‘rsatish uchun, uni to‘xtatilgan oqimdan chaqirish kerak.

// Boshqa oqimda interrupted() chaqirish (t bilan bog‘liq emas)
System.out.println("interrupted() hozirgi oqimdan: " + Thread.interrupted()); // false bo‘lishi kerak (agar hozirgi oqim to‘xtatilmagan bo‘lsa)

Asosiy farq:

Metod To‘xtatish bayrog‘i reset qilinadimi? Metod turi
isInterrupted() Yo‘q Ob’ektga xos
interrupted() Ha Statik