Sobes.tech
Middle

Javaда interrupted() жана isInterrupted() ыкмаларынын айырмасы эмне?

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() Ооба Статикалык