Middle
Kuo skiriasi metodai interrupted() ir isInterrupted() Java?
sobes.tech AI
Atsakymas iš AI
isInterrupted() patikrina, ar dabartinio srauto atšaukimo žymeklis yra nustatytas, ne iš naujo jį išvalydamas.
interrupted() patikrina, ar dabartinio srauto atšaukimo žymeklis yra nustatytas, ir išvalo jį po patikrinimo, jei jis buvo nustatytas. Šis metodas yra static.
Pavyzdys:
// Sukuriame srautą
Thread t = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
// Vykdome naudingą darbą
}
System.out.println("Srautas nutrauktas.");
});
// Pradėti srautą
t.start();
// Nutraukti srautą
t.interrupt();
// Patikrinti žymeklio būseną po interrupt() su isInterrupted()
System.out.println("isInterrupted() po interrupt(): " + t.isInterrupted()); // Turėtų būti true
try {
// Laukti srauto pabaigos (šiuo atveju, jis greitai baigsis)
t.join();
} catch (InterruptedException e) {
// Atstatyti atšaukimo žymeklį, jei join() buvo nutrauktas
Thread.currentThread().interrupt();
}
// Patikrinti žymeklio būseną po interrupt() su interrupted() (iš kito srauto!)
// Dėmesio: interrupted() iš kito srauto neturi prasmės,
// nes interrupted() veikia su dabartinio vykdančio srauto žymekliu.
// Norint parodyti interrupted() veikimą, jį reikia iškviesti iš paties nutraukto srauto.
// Pavyzdys iškviesti interrupted() kitame sraute (nesusijęs su t srautu)
System.out.println("interrupted() iš dabartinio srauto: " + Thread.interrupted()); // Turėtų būti false (jei dabartinis srautas nebuvo nutrauktas)