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();
// isInterrupted() менен interrupt() соңунда белгинин абалын текшерүү
System.out.println("isInterrupted() соңунда interrupt(): " + t.isInterrupted()); // true болушу керек
try {
// Агымдын аяктоосун күтүү (бул учурда, тез аяктайт)
t.join();
} catch (InterruptedException e) {
// join() үзүлсө, үзгүлтүк белгисин кайра калыбына келтирүү
Thread.currentThread().interrupt();
}
// interrupted() менен interrupt() соңунда белгинин абалын башка агымдан текшерүү!
// Эскертүү: interrupted() башка агымдан чакырылса маанилүү эмес,
// анткени ал чакырган агымдын белгиси менен иштейт.
// Демонстрация үчүн, аны үзүлгөн агымда чакырыш керек.
// Башка агымда interrupted() чакырышы (t менен байланыштуу эмес)
System.out.println("interrupted() азыркы агым: " + Thread.interrupted()); // false болушу керек (эгер азыркы агым үзүлбөсө)
Негизги айырма:
| Метод | Үзгүлтүк белгиси кайра нөлгө түшүрүлөбү? | Методтун түрү |
|---|---|---|
isInterrupted() |
Жок | Объекттик |
interrupted() |
Ооба | Статикалык |