Middle
Mi a különbség az interrupted() és az isInterrupted() metódusok között Java-ban?
sobes.tech MI
Válasz az MI-től
isInterrupted() ellenőrzi, hogy a jelenlegi szál beállította-e a megszakítási zászlót, újra nem törölve.
Az interrupted() ellenőrzi, hogy a jelenlegi szál beállította-e a megszakítási zászlót, és törli azt a vizsgálat után, ha be volt állítva. Ez a módszer static.
Példa:
// Szál létrehozása
Thread t = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
// Hasznos munka végzése
}
System.out.println("Szál megszakítva.");
});
// Szál indítása
t.start();
// Szál megszakítása
t.interrupt();
// Az állapot ellenőrzése az interrupt() után az isInterrupted() segítségével
System.out.println("isInterrupted() az interrupt() után: " + t.isInterrupted()); // true kell legyen
try {
// Várakozás a szál befejezésére (ebben az esetben gyorsan befejeződik)
t.join();
} catch (InterruptedException e) {
// A join() megszakítása esetén a zászlót visszaállítjuk
Thread.currentThread().interrupt();
}
// Az állapot ellenőrzése az interrupt() után az interrupted() segítségével (más szálból!)
// Figyelem: az interrupted() hívása más szálból értelmetlen,
// mivel az a hívó szál zászlajával dolgozik.
// Az interrupted() működésének bemutatásához a megszakított szálból kell hívni.
// Példa az interrupted() hívására más szálból (nem kapcsolódik a t-hez)
System.out.println("interrupted() a jelenlegi szálból: " + Thread.interrupted()); // false kell legyen (ha a jelenlegi szál nem volt megszakítva)
Kulcsfontosságú különbség:
| Metódus | A megszakítási zászló resetelődik? | Metódus típusa |
|---|---|---|
isInterrupted() |
Nem | Példány |
interrupted() |
Igen | Statikus |