Sobes.tech
Middle

Kāda ir atšķirība starp metodēm interrupted() un isInterrupted() Java?

sobes.tech AI

Atbilde no AI

isInterrupted() pārbauda, vai pašreizējā pavediena pārtraukšanas karogs ir iestatīts, neatjaunojot to.

interrupted() pārbauda, vai pašreizējā pavediena pārtraukšanas karogs ir iestatīts, un izdzēš to pēc pārbaudes, ja tas bija iestatīts. Šī metode ir static.

Piemērs:

// Izveidojam pavedienu
Thread t = new Thread(() -> {
    while (!Thread.currentThread().isInterrupted()) {
        // Veicam noderīgu darbu
    }
    System.out.println("Pavediens pārtraukts.");
});

// Sākt pavedienu
t.start();

// Pārtraukt pavedienu
t.interrupt();

// Pārbaudīt pārtraukšanas karoga stāvokli pēc interrupt() ar isInterrupted()
System.out.println("isInterrupted() pēc interrupt(): " + t.isInterrupted()); // Jābūt true

try {
    // Gaidi, līdz pavediens beigs darbu (šajā gadījumā tas ātri beigsies)
    t.join();
} catch (InterruptedException e) {
    // Atjauno pārtraukšanas karogu, ja join() tika pārtraukts
    Thread.currentThread().interrupt();
}

// Pārbaudīt pārtraukšanas karoga stāvokli pēc interrupt() ar interrupted() (no cita pavediena!)
// Uzmanību: interrupted() izsaukšana no cita pavediena nav jēgpilna,
// jo interrupted() darbojas ar pašreizējā pavediena karogu.
// Lai demonstrētu interrupted() darbību, to jāizsauc no paša pārtrauktā pavediena.

// Piemērs izsaukt interrupted() citā pavedienā (nav saistīts ar t pavedienu)
System.out.println("interrupted() no pašreizējā pavediena: " + Thread.interrupted()); // Jābūt false (ja pašreizējais pavediens nav pārtraukts)