0 / 0 / 0
Регистрация: 06.07.2023
Сообщений: 3
|
||||||
Прерывание Thread28.11.2023, 20:32. Показов 1329. Ответов 9
Метки нет Все метки)
(
цикла while не выполнится и исключение не выбросится? Такое решение приподносится как верное. Число 100 установлено просто для примера что бы бросало исключение!
0
|
28.11.2023, 20:32 | |
Ответы с готовыми решениями:
9
Реагирование приложения на прерывание из IDE Проблема со Thread... Непонятки в Java. Chain method call. Thread.start() vs Thread.run() |
![]() 1 / 1 / 0
Регистрация: 01.03.2024
Сообщений: 16
|
||||||
19.05.2024, 17:00 | ||||||
Очевидно да, такое может происходить. Это легко проверить, увеличив время выполнения код около инкремента. Например так:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Старт! или 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Прервано! А решение преподносится как верное из-за корректного завершения потока в любом случае, в чем и есть смысл вызова interrupt(). Если что, то мой ответ не заслуживает большого доверия, ибо сам изучаю java только пятый день. Как раз читаю многопоточность.
0
|
![]() 1 / 1 / 0
Регистрация: 01.03.2024
Сообщений: 16
|
|
19.05.2024, 19:29 | |
Хм, я скопировал код из темы как есть. Добавил 6 строк цикла после numSeconds++;//!!!!!!!!. И получил результаты попеременно с выбросом исключения, так и без него, на каждый запуск приложения разные. Так что ситуация точно может быть. Более того, она должна быть, так как, что мешает потоку выполнять инкремент переменной, когда главный поток вызывает interrupt()? Ничего. И вы скорее всего заблуждаетесь, говоря "interrupt() ничего не прерывает кроме методов, которые описаны через throws InterruptedException ..". Вызов interrupt() точно не прерывает, он возобновляет спящий поток и тот отрабатывает исключение обычным образом. Вместе с тем interrupt() должен установить флаг "прерван" в мониторе объекта (в данном случае clock). На этот флаг реагирует Thread.currentThread().isInterrupted() и поток завершается без получения исключения. Думаю вызов interrupt() должен 1) установить флаг для объекта и 2) возобновить выполнение потока, ассоциированного с объектом. Не важно спит поток или выполняется. Просто делает системный ОС вызов "возобновить".
0
|
![]() 736 / 334 / 88
Регистрация: 07.01.2023
Сообщений: 1,416
|
||||||
20.05.2024, 07:11 | ||||||
mavapo,
Потому что код написан криво. Перепишите на
0
|
![]() 1 / 1 / 0
Регистрация: 01.03.2024
Сообщений: 16
|
||||||
20.05.2024, 08:55 | ||||||
Переписал. Все то же самое.
Старт! 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Завершено на 17 или Старт! 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Прервано! Завершено на 18 Только не просите убрать добавленный вызов метода с циклом. Я не собираюсь запускать программку 10 миллионов раз, чтобы выловить однократное срабатывание условия завершения потока через флаг завершения(Thread.currentThread().isInte rrupted()).
0
|
![]() 736 / 334 / 88
Регистрация: 07.01.2023
Сообщений: 1,416
|
|
20.05.2024, 13:17 | |
И чем это вас удивляет? Первый раз interrupt() сработал, выставил флаг isInterrupted, вы его в условии while перехватили и завершили поток. Сообщения "прервано" нет.
Второй раз inetrrupt() был вызыан во время sleep, возбудил исключение, флаг isInterrupted не устанавливался, и мы свалили из потока по исключению. (сообщение "Прервано"). Так что все просто понятно и логично. Каких вы чудес ждете?
0
|
![]() 1 / 1 / 0
Регистрация: 01.03.2024
Сообщений: 16
|
||||||
20.05.2024, 14:35 | ||||||
![]()
0
|
![]() 736 / 334 / 88
Регистрация: 07.01.2023
Сообщений: 1,416
|
|
20.05.2024, 15:28 | |
0
|
![]() 1 / 1 / 0
Регистрация: 01.03.2024
Сообщений: 16
|
|
20.05.2024, 16:30 | |
Ха, ну давайте документацией померяемся
![]() Вот например выдержка из https://docs.oracle.com/javase... rrupt.html В той ссылке, что вы предложили описывается то же самое, т.е. поведение к которому приведет вызов interrupt(). А не то, что этот вызов делает внутри своего кода. Примерно так: "..затем статус прерывания будет очищен и они (функции sleep() и т.д.) получат InterruptedException". Нужно смотреть реализацию в исходном коде на самом деле, чтобы узнать точно кто что делает. Это может быть не очень просто. Моя версия мне нравится больше. А именно: interrupt() устанавливает флаг и возобновляет спящий поток, а sleep() выбрасывает исключение (если есть основания) и очищает флаг (если условие исключения случилось). Это логично и легко реализуемо.
0
|
20.05.2024, 16:30 | ||||||
Помогаю со студенческими работами здесь
10
Как исправить проблему с Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
Jogl ошибка: Exception in thread "Thread-0" java.lang.UnsatisfiedLinkError: Can't load library: /Users/maga/IdeaProjects Ошибка Exception in thread "JavaFX Application Thread" java.lang.NullPointerException Почему когда фоновый thread "спит" я не могу убить main thread ? Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Миграция монолита в Event-Driven микросервисную архитектуру на C#
stackOverflow 11.04.2025
Монолитная архитектура – классический подход к разработке программного обеспечения. Это приложение, построенное как единое целое, где все компоненты тесно связаны между собой. Большинство проектов. . .
|
Go в Kubernetes: Управление ресурсами
golander 11.04.2025
Разработчики Go-приложений в Kubernetes часто сталкиваются с неожиданными проблемами производительности и даже внезапными отказами контейнеров. Причина этого кроется в особенностях взаимодействия. . .
|
Агрегаты и сущности в DDD микросервисах
Javaican 10.04.2025
Разработка современных программных систем часто приводит на распутье: монолит или микросервисы? Даже при выборе микросервисной архитектуры многие команды сталкиваются с проблемой правильного. . .
|
Многопоточность в C#: Task и параллельное программирование
UnmanagedCoder 10.04.2025
Современные процессоры уже давно перестали наращивать тактовую частоту в пользу увеличения количества ядер. Это создало интересную ситуацию: разработчики, привыкшие к последовательному. . .
|
Линейное решение нелинейной задачи будет иметь приблизительный результат вычисления для метода обработки данных из double buffering.
Hrethgir 10.04.2025
Вообще изначально я пренебрёг квадратурой числа, но потом понял, что для вычисления приблизительного значения - сгодится, формулу можно будет корректировать по ходу. Это потому что прямое соотношение. . .
|
Переменные в Python
py-thonny 10.04.2025
Переменная в программировании — это символическое имя, связанное с областью памяти, в которой хранится значение. Она позволяет получать доступ к данным через понятные человеку идентификаторы, а не. . .
|
Многопоточность в C#: Task и асинхронные операции
UnmanagedCoder 10.04.2025
Многопоточность позволяет выполнять несколько операций одновременно, что важно для решения двух основных задач: повышения скорости выполнения вычислительно-сложных операций и сохранения отзывчивости. . .
|
Запуск контейнеров Docker на ARM64
Mr. Docker 09.04.2025
Появление таких решений, как Apple M1/ M2, AWS Graviton, Ampere Altra и Raspberry Pi, сделало использование ARM-систем обыденностью для многих разработчиков и DevOps-инженеров. При этом Docker,. . .
|
Vue SFC компонент на PHP с Fusion
Jason-Webb 09.04.2025
PHP на сервере и JavaScript на клиенте — классическое сочетание, которое, несмотря на свою эффективность, создает определенный когнитивный диссонанс при разработке. В этом контексте появляются. . .
|
TypeScript vs JavaScript: Отличия и когда что использовать
Reangularity 09.04.2025
JavaScript появился в 1995 году как творение Брендана Эйха и быстро стал основой интерактивности в вебе. За свою историю он прошел путь от простого языка для манипуляций с DOM до полноценной. . .
|