Рассмотрите несколько потоков, пытающихся получить доступ к критическому разделу, что произойдет с одним потоком, который происходит. Исключение внутри синхронизированного блока, у которого есть wait() и notify() для блокировки и освобождения блокировки ,Что произойдет, если поток выбрасывает исключение внутри синхронизированного блока
ответ
Монитор синхронизации будет выпущен: «Если выполнение тела завершено, как обычно, так и внезапно, действие разблокировки автоматически выполняется на том же мониторе». Спецификация языка Java 17.1. Synchronization.
Другие темы смогут продолжить синхронизацию и вызвать ожидание и уведомление.
Если поток, за исключением которого хранится некоторый ресурс критической программной логики, возможно, вам придется использовать try-finally для обеспечения его освобождения.
Как упоминалось в случае возникновения исключения, его необходимо обработать/бросить, чтобы продолжить выполнение, иначе выполнение остановится. Таким образом, в вашем сценарии одинаково, если возникает исключение, тогда оно будет обработано, и дальше блокировка будет выпущена.
что произойдет, если блокировка не была выпущена вручную. если делает какие-либо мертвые блокировки –
Как правило, мы должны позаботиться обо всех сценариях, чтобы избежать возможности блокировки. Если какая-либо мертвая блокировка вызывается, мы ничего не можем сделать с нашей стороны, кроме перезапуска приложения. Чтобы избежать тупиков, я предлагаю вам ознакомиться с «Межканальной связью на Java». –
@ Viswanath D ok ok –
Возможно, вы задумываетесь о блокировках так же, как и ресурсы (соединения, ввод-вывод), но в отличие от блокировки ресурсов будут освобождены, как только исполняемый поток достигнет границы выхода критической секции (закрывающая скобка монитора/синхронизированного блока) независимо от того, выбрано ли исключение.
Если выполнение блока завершается преждевременно по какой-либо причине, то монитор разблокирован и синхронизированный оператор завершается преждевременно по той же причине.
, тогда эта блокировка будет автоматически отпущена –
Да, в случае исключения монитор разблокируется, и инструкция 'synchronized' завершается внезапно, освобождая блокировку (монитор) –
- 1. Что произойдет, если мой IExceptionPublisher выбрасывает исключение?
- 2. java - переупорядочение внутри синхронизированного блока
- 3. Выполнение нового потока внутри синхронизированного блока
- 4. Android - начальный поток от синхронизированного блока
- 5. Java: что происходит, когда новый поток запускается из синхронизированного блока?
- 6. Зачем ждать внутри синхронизированного?
- 7. Что произойдет, если блок finally выдает исключение?
- 8. C#: что произойдет, если исключение не обнаружено
- 9. Что произойдет, если входной поток отправлен в выходной поток?
- 10. AtomicBoolean против синхронизированного блока, Что разница
- 11. Упрощение синхронизированного блока в Java
- 12. Поведение синхронизированного
- 13. Что произойдет, если один поток выйдет из строя в процессе?
- 14. Когда блокировка освобождается, если я возвращаюсь из синхронизированного блока?
- 15. java и передача синхронизированного блока, когда другой поток удерживает блокировку
- 16. Исключение внутри блока блокировки
- 17. Что произойдет, если один поток OpenMP завершится с ошибкой?
- 18. Требуется ли использовать thread wait() и уведомлять() внутри синхронизированного блока?
- 19. Многопоточная правильность: использование синхронизированного блока
- 20. Is notifyAll() требуется в конце синхронизированного блока?
- 21. Verilog всегда внутри генерирующего блока выбрасывает ошибку
- 22. Почему даже wait() вызывается, когда поток не прошел внутри синхронизированного
- 23. System.out.println() не выбрасывает исключение, но System.in.read() выбрасывает исключение, почему?
- 24. Исключение внутри блока улова
- 25. Что произойдет, если размер InputSplit отличается от размера блока?
- 26. Что произойдет, если action = ""?
- 27. исключение NullPointer всякий раз, когда с помощью синхронизированного блока
- 28. Что произойдет, если приложение закрыто, когда поток ThreadPool записывает файл?
- 29. Что произойдет, если поток в критической секции затухает?
- 30. Что произойдет, если поток получит 10 реентерабельных замков и штампов?
Это ответ здесь, http://stackoverflow.com/questions/12521776/what-happens-to-the-lock-when-thread-crashes-inside-a-synchronized-block и http: // stackoverflow.com/questions/2019339/side-effects-of-throwing-an-exception-inside-a-synchronized-clause –
@KennethClark \t Что произойдет, если блокировка не была выпущена вручную. если совершает какие-либо мертвые блокировки –
Блокировка гарантированно будет завершена во всех случаях –