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();

// Ստուգում ենք նշանի վիճակը interrupt()-ից հետո isInterrupted()-ով
System.out.println("isInterrupted() հետո interrupt(): " + t.isInterrupted()); // պետք է լինի true

try {
    // Կ սպասում ենք հոսքի ավարտին (այս դեպքում, արագ կավարտվի)
    t.join();
} catch (InterruptedException e) {
    // Վերականգնում ենք ընդհատման նշանը, եթե join()-ը ընդհատվել է
    Thread.currentThread().interrupt();
}

// Ստուգում ենք նշանի վիճակը interrupt()-ից հետո interrupted()-ով (այլ հոսքից!)
// Զգուշացում: interrupted()-ը այլ հոսքից կանչել իմաստ չունի,
// քանի որ այն աշխատում է կանչող հոսքի նշանի հետ:
// Դեմոնստրացիայի համար, այն պետք է կանչել հենց ընդհատված հոսքից:

// Օրինակ, interrupted()-ը կանչել այլ հոսքից (չկապված t-ով)
System.out.println("interrupted() ներկայիս հոսքից: " + Thread.interrupted()); // պետք է լինի false (եթե ներկայիս հոսքը չի ընդհատվել)

Հիմնական տարբերությունը:

Մեթոդ Արդյոք նշանը վերականգնվում է? Մեթոդի տեսակ
isInterrupted() Ոչ Օբյեկտային
interrupted() Այո Ստատիկ