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 |