Middle
Mis vahe on meetoditel interrupted() ja isInterrupted() Java-s?
sobes.tech AI
Vastus AI-lt
isInterrupted() kontrollib, kas on praeguse niidi katkestamise lipp on seatud, mitte lähtudes sellest ja puhastades selle pärast kontrollimist.
interrupted() kontrollib, kas praeguse niidi katkestamise lipp on seatud, ja puhastab selle pärast kontrollimist, kui see oli seatud. See meetod on static.
Näide:
// Loome niidi
Thread t = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
// Teeme kasulikku tööd
}
System.out.println("Niit katkestatud.");
});
// Käivitame niidi
t.start();
// Katkestame niidi
t.interrupt();
// Kontrollime katkestamise lipu olekut pärast interrupt() isInterrupted() abil
System.out.println("isInterrupted() pärast interrupt(): " + t.isInterrupted()); // Peaks olema true
try {
// Ootame niidi lõpetamist (selles näites, see lõpeb kiiresti)
t.join();
} catch (InterruptedException e) {
// Taastame katkestamise lipu, kui join() katkestati
Thread.currentThread().interrupt();
}
// Kontrollime katkestamise lipu olekut pärast interrupt() interrupted() abil (teises niidis!)
// Tähelepanu: interrupted() väljakutse teises niidis ei ole mõistlik,
// kuna interrupted() töötab praeguse täitva niidi lipuga.
// Näitena tuleb seda kutsuda ise katkestatud niidist.
// Näide, kuidas kutsuda interrupted() teises niidis (ei ole seotud t-niidiga)
System.out.println("interrupted() praegusest niidist: " + Thread.interrupted()); // Peaks olema false (kui praegune niit ei olnud katkestatud)