У меня есть несколько общих вопросов о концепции тупиковых ситуаций. Я пытаюсь изучить основы создания многопоточных приложений, и мне просто нужны несколько ключевых слов, которые, в основном, указывают мне правильное направление, на что обращать внимание, поскольку у меня проблемы с пониманием некоторых базовых концепций.
Я хочу узнать, как я могу программировать очереди в java, чтобы я мог удерживать элементы до обработки. Например, если в моем приложении много уведомлений, я хочу, чтобы они помещали их в очередь и обрабатывали их асинхронно, чтобы они не обращались к базе данных одновременно и избегали DEADLOCKS.
Поэтому я начал изучать пакет java.util.concurrent на Java, но до этого у меня остались лишь некоторые базовые вопросы.
Подходит ли интерфейс java.util.Queue к этой проблеме?
У меня есть еще один основной вопрос к поведению, которого я не понимаю. Предположим, у нас есть базовое приложение, в котором несколько пользователей могут входить в систему и редактировать информацию своего профиля (имя, дата рождения ...). Если два пользователя вошли в систему и редактируют свою информацию одновременно, то обе данные должны храниться в одной и той же таблице пользователей. Может ли это привести к тупиковой ситуации, поскольку оба обращаются к одной и той же таблице? Как Spring справляется с этим?
Обновлено:
Как я описал выше, у меня есть приложение, которое обрабатывает несколько задач, что иногда приводит к тупикам. Я хочу, чтобы они поставили в очередь, а затем обрабатывали каждую задачу асинхронно.
Я провел некоторое исследование и считаю, что лучшим решением было бы использовать шаблон "Производитель-потребитель" с ExecutorService с BlockingQueue, как описано в этой статье: https://allegro.tech/2015/05/thread-pools.html
Как вы думаете? Мне просто нужны идеи, подходит ли это решение для описания моей проблемы? Есть ли лучшие способы сделать это?
Обработка уведомлений вне очереди - не панацея от всех тупиковых ситуаций. Это просто означает, что обработка одного уведомления никогда не будет тупиковой с обработка другого уведомления.




«Может ли это привести к тупиковой ситуации, поскольку оба обращаются к одной и той же таблице? Как Spring справляется с этим?» - в этом случае ответственность за обеспечение свободы от взаимоблокировок несет не Spring, а база данных. Пока задействована только одна таблица, взаимоблокировки быть не должно.