Sobes.tech
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() Ҳа Статик