[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-servlety-kakim-obrazom-mozhno-dopustit-v-servlete-deadlock":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":16,"progress":17,"seo":18},537,"kakim-obrazom-mozhno-dopustit-v-servlete-deadlock",13,"servlety","Сервлеты","🖧","Каким образом можно допустить в сервлете deadlock","Deadlock в сервлете можно получить при циклических синхронных вызовах между методами. Классический пример: метод `doGet()` вызывает `doPost()`, а `doPost()` вызывает `doGet()` — каждый ожидает завершения другого, что приводит к взаимной блокировке.\n\nДругие способы допустить deadlock в сервлетах:\n\n- Синхронизация на общих ресурсах в разном порядке в разных сервлетах (сервлет A блокирует ресурс 1, потом 2; сервлет B блокирует 2, потом 1)\n- Использование `RequestDispatcher.forward()` или `include()` для вызова сервлета, который пытается захватить тот же монитор\n- Блокирующие вызовы внешних сервисов без таймаутов в synchronized-блоках\n\nДля предотвращения deadlock следует избегать синхронизации в сервлетах по возможности, использовать неизменяемые объекты и локальные переменные, а при необходимости синхронизации — всегда захватывать мониторы в одном и том же порядке.\n\n> **На собеседовании:** вопрос проверяет понимание многопоточности в контексте сервлетов. Покажите, что знаете: сервлет — синглтон, обрабатывающий запросы в разных потоках. Любая синхронизация на полях экземпляра — потенциальный deadlock.","","middle",[15],"servlets",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Каким образом можно допустить в сервлете deadlock — Gymterview","Deadlock в сервлете можно получить при циклических синхронных вызовах между методами. Классический пример: метод `doGet()` вызывает `doPost()`, а `doPost()` выз","Deadlock в сервлете можно получить при циклических синхронных вызовах между методами. Классический пример: метод `doGet(",[15,13],"Deadlock в сервлете можно получить при циклических синхронных вызовах между методами. Классический пример: метод `doGet()` вызывает `doPost()`, а `doPost()` вызывает `doGet()` — каждый ожидает завершения другого, что приводит к взаимной блокировке.",true]