Middle
Kāda ir atšķirība starp metodēm interrupted() un isInterrupted() Java?
sobes.tech AI
Atbilde no AI
isInterrupted() pārbauda, vai pašreizējā pavediena pārtraukšanas karogs ir iestatīts, neatjaunojot to.
interrupted() pārbauda, vai pašreizējā pavediena pārtraukšanas karogs ir iestatīts, un izdzēš to pēc pārbaudes, ja tas bija iestatīts. Šī metode ir static.
Piemērs:
// Izveidojam pavedienu
Thread t = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
// Veicam noderīgu darbu
}
System.out.println("Pavediens pārtraukts.");
});
// Sākt pavedienu
t.start();
// Pārtraukt pavedienu
t.interrupt();
// Pārbaudīt pārtraukšanas karoga stāvokli pēc interrupt() ar isInterrupted()
System.out.println("isInterrupted() pēc interrupt(): " + t.isInterrupted()); // Jābūt true
try {
// Gaidi, līdz pavediens beigs darbu (šajā gadījumā tas ātri beigsies)
t.join();
} catch (InterruptedException e) {
// Atjauno pārtraukšanas karogu, ja join() tika pārtraukts
Thread.currentThread().interrupt();
}
// Pārbaudīt pārtraukšanas karoga stāvokli pēc interrupt() ar interrupted() (no cita pavediena!)
// Uzmanību: interrupted() izsaukšana no cita pavediena nav jēgpilna,
// jo interrupted() darbojas ar pašreizējā pavediena karogu.
// Lai demonstrētu interrupted() darbību, to jāizsauc no paša pārtrauktā pavediena.
// Piemērs izsaukt interrupted() citā pavedienā (nav saistīts ar t pavedienu)
System.out.println("interrupted() no pašreizējā pavediena: " + Thread.interrupted()); // Jābūt false (ja pašreizējais pavediens nav pārtraukts)