Middle
Jaký je rozdíl mezi metodami interrupted() a isInterrupted() v Java?
sobes.tech AI
Odpověď od AI
isInterrupted() kontroluje, zda má aktuální vlákno nastavený pruh přerušení, aniž by jej resetoval.
interrupted() kontroluje, zda má aktuální vlákno nastavený pruh přerušení, a jej po kontrole resetuje, pokud byl nastaven. Tato metoda je static.
Příklad:
// Vytvoření vlákna
Thread t = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
// Provádět užitečnou práci
}
System.out.println("Vlákno přerušeno.");
});
// Spuštění vlákna
t.start();
// Přerušení vlákna
t.interrupt();
// Kontrola stavu pruhu po interrupt() pomocí isInterrupted()
System.out.println("isInterrupted() po interrupt(): " + t.isInterrupted()); // mělo by být true
try {
// Čekání na ukončení vlákna (v tomto případě rychle skončí)
t.join();
} catch (InterruptedException e) {
// Obnovení pruhu přerušení, pokud bylo join() přerušeno
Thread.currentThread().interrupt();
}
// Kontrola stavu pruhu po interrupt() pomocí interrupted() (z jiného vlákna!)
// Pozor: volání interrupted() z jiného vlákna nedává smysl,
// protože pracuje s pruhou aktuálního vlákna.
// Pro demonstraci funkce interrupted() je třeba ji volat z přerušovaného vlákna.
// Příklad volání interrupted() v jiném vlákně (nesouvisí s t)
System.out.println("interrupted() z aktuálního vlákna: " + Thread.interrupted()); // mělo by být false (pokud aktuální vlákno nebylo přerušeno)
Klíčový rozdíl:
| Metoda | Pruh přerušení je resetován? | Typ metody |
|---|---|---|
isInterrupted() |
Ne | Instance |
interrupted() |
Ano | Statická |