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