Middle
Java-ში interrupted() და isInterrupted() მეთოდების შორის რა განსხვავებაა?
sobes.tech AI
პასუხი AI-სგან
isInterrupted() შემოწმებს, არის თუ არა მიმდინარე ნაკადის შეწყვეტის ნიშანი დაყენებული, არასდროს მასზე წაშლის.
interrupted() შემოწმებს, არის თუ არა მიმდინარე ნაკადის შეწყვეტის ნიშანი დაყენებული, და წაშლის მას შემდეგ, რაც შეამოწმებს, თუ ის იყო დაყენებული. ეს მეთოდი არის static.
მაგალითი:
// ნაკადის შექმნა
Thread t = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
// სასარგებლო სამუშაოს შესრულება
}
System.out.println("ნაკადი შეწყდა.");
});
// ნაკადის დაწყება
t.start();
// ნაკადის შეწყვეტა
t.interrupt();
// შეწყვეტის ნიშნის მდგომარეობის შემოწმება after interrupt() with isInterrupted()
System.out.println("isInterrupted() შემდეგ interrupt(): " + t.isInterrupted()); // უნდა იყოს true
try {
// დაველოდოთ ნაკადის დასრულებას (ამ შემთხვევაში, ის სწრაფად დასრულდება)
t.join();
} catch (InterruptedException e) {
// შეწყვეტის ნიშნის აღდგენა, თუ join() შეწყდა
Thread.currentThread().interrupt();
}
// შეწყვეტის ნიშნის მდგომარეობის შემოწმება after interrupt() with interrupted() (სხვა ნაკადიდან!)
// ყურადღება: interrupted()-ს სხვა ნაკადიდან გამოძახება არ აქვს აზრი,
// რადგან interrupted() მუშაობს მიმდინარე ნაკადის ნიშანზე.
// იმისთვის, რომ აჩვენოთ interrupted()-ის მუშაობა, უნდა გამოიძახოთ ის თავად შეწყვეტილ ნაკადში.
// მაგალითი interrupted()-ის გამოძახების სხვა ნაკადში (არასდროს ეხება t-ის ნაკადს)
System.out.println("interrupted() მიმდინარე ნაკადიდან: " + Thread.interrupted()); // უნდა იყოს false (თუ მიმდინარე ნაკადი არ იყო შეწყვეტილი)