[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-mnogopotochnost-v-chem-raznitsa-mezhdu-interrupted-i-isinterrupted":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":20,"progress":21,"seo":22},264,"v-chem-raznitsa-mezhdu-interrupted-i-isinterrupted",8,"mnogopotochnost","Многопоточность","🔀","В чем разница между interrupted() и isInterrupted()?","\u003C!-- grade: 4\u002F5 — различия описаны верно, но нет примера кода -->\n\nОба метода проверяют **флаг прерывания** потока, который устанавливается вызовом `Thread.interrupt()`. Ключевое различие -- в побочных эффектах и в том, чей флаг проверяется.\n\n### Сравнение\n\n| Характеристика | `Thread.interrupted()` | `thread.isInterrupted()` |\n|---|---|---|\n| Тип метода | **Статический** | **Экземплярный** (instance) |\n| Какой поток проверяет | Всегда **текущий** поток (`Thread.currentThread()`) | **Любой** поток (тот, на котором вызван метод) |\n| Сбрасывает флаг | **Да** -- после вызова флаг устанавливается в `false` | **Нет** -- флаг не изменяется |\n| Типичное использование | Проверка «меня прервали?» внутри рабочего цикла | Проверка «прерван ли другой поток?» из наблюдателя |\n\n### Сигнатуры\n\n```java\n\u002F\u002F Статический — проверяет текущий поток, сбрасывает флаг\npublic static boolean interrupted();\n\n\u002F\u002F Экземплярный — проверяет конкретный поток, НЕ сбрасывает флаг\npublic boolean isInterrupted();\n```\n\n### Пример поведения\n\n\u003Cdetails>\n\u003Csummary>Пример: разница между interrupted() и isInterrupted()\u003C\u002Fsummary>\n\n```java\npublic class InterruptedVsIsInterrupted {\n    public static void main(String[] args) throws InterruptedException {\n        Thread worker = new Thread(() -> {\n            \u002F\u002F Прерываем поток\n            Thread.currentThread().interrupt();\n\n            \u002F\u002F isInterrupted() — НЕ сбрасывает флаг\n            System.out.println(\"isInterrupted(): \"\n                + Thread.currentThread().isInterrupted()); \u002F\u002F true\n            System.out.println(\"isInterrupted(): \"\n                + Thread.currentThread().isInterrupted()); \u002F\u002F true (флаг на месте)\n\n            \u002F\u002F Thread.interrupted() — СБРАСЫВАЕТ флаг\n            System.out.println(\"interrupted(): \"\n                + Thread.interrupted());                    \u002F\u002F true\n            System.out.println(\"interrupted(): \"\n                + Thread.interrupted());                    \u002F\u002F false (флаг сброшен!)\n        });\n\n        worker.start();\n        worker.join();\n\n        \u002F\u002F isInterrupted() можно вызвать на другом потоке\n        Thread anotherWorker = new Thread(() -> {\n            try { Thread.sleep(10000); } catch (InterruptedException e) { }\n        });\n        anotherWorker.start();\n        anotherWorker.interrupt();\n        \u002F\u002F Проверяем флаг другого потока из main\n        System.out.println(\"anotherWorker прерван: \"\n            + anotherWorker.isInterrupted());\n        \u002F\u002F Может быть true или false — зависит от таймингов\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Типичная ошибка\n\nРаспространённая ошибка -- использование `Thread.interrupted()` вместо `isInterrupted()` в цикле:\n\n```java\n\u002F\u002F ОШИБКА: первая проверка сбросит флаг, и цикл никогда не завершится\nwhile (!Thread.interrupted()) {\n    doWork();\n    if (Thread.interrupted()) { \u002F\u002F Первая проверка уже сбросила флаг!\n        cleanup();\n        break;\n    }\n}\n\n\u002F\u002F ПРАВИЛЬНО: используйте isInterrupted() для проверки в цикле\nwhile (!Thread.currentThread().isInterrupted()) {\n    doWork();\n}\n```\n\n> **Аналогия из жизни.** Представьте записку «Тебя искали» на вашем столе. `isInterrupted()` -- это посмотреть на записку, убедиться, что она есть, и оставить на месте. `Thread.interrupted()` -- это посмотреть на записку и выбросить её. Второй раз посмотрите -- записки уже нет.\n\n> **На собеседовании.** Три ключевых отличия: (1) `interrupted()` -- статический, проверяет текущий поток; `isInterrupted()` -- экземплярный, проверяет любой поток; (2) `interrupted()` **сбрасывает** флаг, `isInterrupted()` -- нет; (3) для проверки в рабочем цикле используйте `isInterrupted()`, а `interrupted()` -- только когда нужно сбросить флаг (например, перед повторной блокирующей операцией).","","middle",[15,16,17,18,19],"isInterrupted","interrupted","прерывание","Thread","concurrency",[],null,{"title":23,"description":24,"ogTitle":25,"ogDescription":26,"keywords":27,"schemaAnswer":32,"featuredSnippetReady":33},"interrupted() vs isInterrupted() в Java — Gymterview","Thread.interrupted() — статический, проверяет текущий поток и сбрасывает флаг. isInterrupted() — нестатический, проверяет другой поток без сброса флага.","interrupted() vs isInterrupted() — сброс флага или нет","Thread.interrupted() — статический, сбрасывает флаг прерывания. isInterrupted() — нестатический, не сбрасывает. Оба проверяют статус прерывания.",[28,29,30,31],"interrupted vs isInterrupted Java","Thread.interrupted Java","isInterrupted Java","флаг прерывания потока","Thread.interrupted() — статический метод, проверяет текущий поток и сбрасывает флаг прерывания. isInterrupted() — нестатический, проверяет статус прерывания другого потока без изменения флага.",true]