Sobes.tech
Middle

Koja je razlika između metoda interrupted() i isInterrupted() u Javi?

sobes.tech АИ

Одговор од АИ

isInterrupted() proverava da li trenutni tok ima postavljen zastavicu prekida, ne brišući je.

interrupted() proverava da li trenutni tok ima postavljenu zastavicu prekida, i je briše nakon provere, ako je bila postavljena. Ova metoda je static.

Primer:

// Kreiramo tok
Thread t = new Thread(() -> {
    while (!Thread.currentThread().isInterrupted()) {
        // Obavljamo korisne zadatke
    }
    System.out.println("Tok prekinut.");
});

// Pokrećemo tok
t.start();

// Prekidamo tok
t.interrupt();

// Proveravamo stanje zastavice nakon interrupt() pomoću isInterrupted()
System.out.println("isInterrupted() nakon interrupt(): " + t.isInterrupted()); // trebalo bi da bude true

try {
    // Čekamo da tok završi (u ovom slučaju, brzo će se završiti)
    t.join();
} catch (InterruptedException e) {
    // Obnavljamo zastavicu prekida ako je join() prekinut
    Thread.currentThread().interrupt();
}

// Proveravamo stanje zastavice nakon interrupt() pomoću interrupted() (iz drugog toka!)
// Pažnja: pozivanje interrupted() iz drugog toka nema smisla,
// jer radi sa zastavicom trenutnog toka.
// Da bismo demonstrirali rad interrupted(), treba ga pozvati iz samog prekinutog toka.

// Primer poziva interrupted() u drugom toku (nije povezano sa t)
System.out.println("interrupted() iz trenutnog toka: " + Thread.interrupted()); // trebalo bi da bude false (ako trenutni tok nije prekinut)

Ključna razlika:

Metod Da li se zastavica prekida resetuje? Tip metode
isInterrupted() Ne Instanca
interrupted() Da Statička