Sobes.tech
Middle

Wat is het verschil tussen de methoden interrupted() en isInterrupted() in Java?

sobes.tech AI

Antwoord van AI

isInterrupted() controleert of de huidige thread de onderbrekingsvlag heeft gezet, zonder deze te resetten.

interrupted() controleert of de huidige thread de onderbrekingsvlag heeft gezet, en reset deze na controle, als deze was gezet. Deze methode is static.

Voorbeeld:

// Maak een thread
Thread t = new Thread(() -> {
    while (!Thread.currentThread().isInterrupted()) {
        // Voer nuttig werk uit
    }
    System.out.println("Thread onderbroken.");
});

// Start de thread
t.start();

// Onderbreek de thread
t.interrupt();

// Controleer de vlagstatus na interrupt() met isInterrupted()
System.out.println("isInterrupted() na interrupt(): " + t.isInterrupted()); // zou true moeten zijn

try {
    // Wacht tot de thread eindigt (in dit geval, snel)
    t.join();
} catch (InterruptedException e) {
    // Herstel de onderbrekingsvlag als join() wordt onderbroken
    Thread.currentThread().interrupt();
}

// Controleer de vlagstatus na interrupt() met interrupted() (van een andere thread!)
// Let op: interrupted() aanroepen vanuit een andere thread heeft geen zin,
// omdat interrupted() werkt met de vlag van de thread die het aanroept.
// Om de werking van interrupted() te demonstreren, moet het vanuit de onderbroken thread worden aangeroepen.

// Voorbeeld van interrupted() aanroepen in een andere thread (niet gerelateerd aan t)
System.out.println("interrupted() vanuit de huidige thread: " + Thread.interrupted()); // zou false moeten zijn (als de huidige thread niet is onderbroken)

Belangrijk verschil:

Methode Vlag wordt gereset? Type methode
isInterrupted() Nee Instantie
interrupted() Ja Statisch