Sobes.tech
Middle

Kuo skiriasi metodai interrupted() ir isInterrupted() Java?

sobes.tech AI

Atsakymas iš AI

isInterrupted() patikrina, ar dabartinio srauto atšaukimo žymeklis yra nustatytas, ne iš naujo jį išvalydamas.

interrupted() patikrina, ar dabartinio srauto atšaukimo žymeklis yra nustatytas, ir išvalo jį po patikrinimo, jei jis buvo nustatytas. Šis metodas yra static.

Pavyzdys:

// Sukuriame srautą
Thread t = new Thread(() -> {
    while (!Thread.currentThread().isInterrupted()) {
        // Vykdome naudingą darbą
    }
    System.out.println("Srautas nutrauktas.");
});

// Pradėti srautą
t.start();

// Nutraukti srautą
t.interrupt();

// Patikrinti žymeklio būseną po interrupt() su isInterrupted()
System.out.println("isInterrupted() po interrupt(): " + t.isInterrupted()); // Turėtų būti true

try {
    // Laukti srauto pabaigos (šiuo atveju, jis greitai baigsis)
    t.join();
} catch (InterruptedException e) {
    // Atstatyti atšaukimo žymeklį, jei join() buvo nutrauktas
    Thread.currentThread().interrupt();
}

// Patikrinti žymeklio būseną po interrupt() su interrupted() (iš kito srauto!)
// Dėmesio: interrupted() iš kito srauto neturi prasmės,
// nes interrupted() veikia su dabartinio vykdančio srauto žymekliu.
// Norint parodyti interrupted() veikimą, jį reikia iškviesti iš paties nutraukto srauto.

// Pavyzdys iškviesti interrupted() kitame sraute (nesusijęs su t srautu)
System.out.println("interrupted() iš dabartinio srauto: " + Thread.interrupted()); // Turėtų būti false (jei dabartinis srautas nebuvo nutrauktas)