Middle
Тафовут байни усулҳои interrupted() ва isInterrupted() дар Java чист?
sobes.tech AI
Ҷавоб аз AI
isInterrupted() текшерет, оё ҳозирги тўқимада тўхтатиш байроғи ўрнатилганми, уни қайта ўрнатмай.
interrupted() текшерет, оё ҳозирги тўқимада тўхтатиш байроғи ўрнатилганми, ва уни ўчиради кейинги текширишдан сўнг, агар у ўрнатилган бўлса. Бу метод static.
Масалан:
// Тўқимани яратиш
Thread t = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
// Фойдали ишларни бажариш
}
System.out.println("Тўқима узилган.");
});
// Тўқимани ишга тушириш
t.start();
// Тўқимани узиш
t.interrupt();
// isInterrupted() билан interrupt()дан кейин байроқ ҳолатини текшириш
System.out.println("isInterrupted()дан кейин interrupt(): " + t.isInterrupted()); // керак бўлса true
try {
// Тўқиманинг тугашини кутамиз (бунда, тез тугаши кутилмоқда)
t.join();
} catch (InterruptedException e) {
// join() бузилса, байроқни қайта ўрнатамиз
Thread.currentThread().interrupt();
}
// interrupted() билан interrupt()дан кейин байроқ ҳолатини бошқа тўқимдан текшириш!
// Эслатма: interrupted()-ни бошқа тўқимдан чақириш маънога эга эмас,
// чунки у чақирувчи тўқиманинг байрагини ишлайди.
// Демонстрация учун, у узилган тўқимада чақирилиши керак.
// Бошқа тўқимада interrupted() чақириш (t билан боғлиқ эмас)
System.out.println("interrupted() ҳозирги тўқимадан: " + Thread.interrupted()); // керак бўлса false
Асосий фарқ:
| Метод | Байроқ қайта ўрнатиладими? | Метод тури |
|---|---|---|
isInterrupted() |
Йўқ | Нусха |
interrupted() |
Ҳа | Статик |