Sobes.tech
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 (თუ მიმდინარე ნაკადი არ იყო შეწყვეტილი)