Sobes.tech
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