Middle
Aký je rozdiel medzi metódami interrupted() a isInterrupted() v Jave?
sobes.tech AI
Odpoveď od AI
isInterrupted() kontroluje, či má aktuálny vlákno nastavený prerušenie, bez jeho resetovania.
interrupted() kontroluje, či má aktuálne vlákno nastavený prerušenie, a ho resetuje po kontrole, ak bol nastavený. Tento spôsob je static.
Príklad:
// Vytvoríme vlákno
Thread t = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
// Vykonávame užitočnú prácu
}
System.out.println("Vlákno prerušené.");
});
// Spustíme vlákno
t.start();
// Prerušíme vlákno
t.interrupt();
// Skontrolujeme stav vlajky po interrupt() pomocou isInterrupted()
System.out.println("isInterrupted() po interrupt(): " + t.isInterrupted()); // malo by byť true
try {
// Čakáme na ukončenie vlákna (v tomto prípade, rýchlo skončí)
t.join();
} catch (InterruptedException e) {
// Obnovíme vlajku prerušenia, ak bola join() prerušená
Thread.currentThread().interrupt();
}
// Skontrolujeme stav vlajky po interrupt() pomocou interrupted() (z iného vlákna!)
// Pozor: volanie interrupted() z iného vlákna nemá zmysel,
// pretože pracuje s vlajkou aktuálneho vlákna.
// Pre demonštráciu fungovania interrupted() je potrebné ju volať z prerušeného vlákna.
// Príklad volania interrupted() v inom vlákne (nesúvisí s t)
System.out.println("interrupted() z aktuálneho vlákna: " + Thread.interrupted()); // malo by byť false (ak aktuálne vlákno nebolo prerušené)
Kľúčový rozdiel:
| Metóda | Vlajka prerušenia je resetovaná? | Typ metódy |
|---|---|---|
isInterrupted() |
Nie | Inštancia |
interrupted() |
Áno | Statická |