Middle
Care este diferența dintre metodele interrupted() și isInterrupted() în Java?
sobes.tech AI
Răspuns de la AI
isInterrupted() verifică dacă firul curent are setat flag-ul de întrerupere, fără a-l reseta.
interrupted() verifică dacă firul curent are setat flag-ul de întrerupere, și l îl resetează după verificare, dacă a fost setat. Această metodă este static.
Exemplu:
// Creăm un fir
Thread t = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
// Execută muncă utilă
}
System.out.println("Fir întrerupt.");
});
// Pornim firul
t.start();
// Întrerupem firul
t.interrupt();
// Verificăm starea flag-ului după interrupt() cu isInterrupted()
System.out.println("isInterrupted() după interrupt(): " + t.isInterrupted()); // ar trebui să fie true
try {
// Așteptăm finalizarea firului (în acest caz, se va termina rapid)
t.join();
} catch (InterruptedException e) {
// Restabilim flag-ul de întrerupere dacă join() a fost întrerupt
Thread.currentThread().interrupt();
}
// Verificăm starea flag-ului după interrupt() cu interrupted() (dintr-un alt fir!)
// Atenție: apelarea interrupted() dintr-un alt fir nu are sens,
// deoarece interrupted() funcționează cu flag-ul firului care îl apelează.
// Pentru demonstrație, trebuie să o apelăm din firul întrerupt.
// Exemplu de apelare a interrupted() din alt fir (nu are legătură cu firul t)
System.out.println("interrupted() din firul curent: " + Thread.interrupted()); // ar trebui să fie false (dacă firul curent nu a fost întrerupt)
Diferența cheie:
| Metodă | Flag-ul de întrerupere este resetat? | Tip metodă |
|---|---|---|
isInterrupted() |
Nu | Instanță |
interrupted() |
Da | Static |