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 |