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() |
Այո | Ստատիկ |