Тупик приложения Java Spring

У меня есть несколько общих вопросов о концепции тупиковых ситуаций. Я пытаюсь изучить основы создания многопоточных приложений, и мне просто нужны несколько ключевых слов, которые, в основном, указывают мне правильное направление, на что обращать внимание, поскольку у меня проблемы с пониманием некоторых базовых концепций.

Я хочу узнать, как я могу программировать очереди в java, чтобы я мог удерживать элементы до обработки. Например, если в моем приложении много уведомлений, я хочу, чтобы они помещали их в очередь и обрабатывали их асинхронно, чтобы они не обращались к базе данных одновременно и избегали DEADLOCKS.

Поэтому я начал изучать пакет java.util.concurrent на Java, но до этого у меня остались лишь некоторые базовые вопросы.

Подходит ли интерфейс java.util.Queue к этой проблеме?

У меня есть еще один основной вопрос к поведению, которого я не понимаю. Предположим, у нас есть базовое приложение, в котором несколько пользователей могут входить в систему и редактировать информацию своего профиля (имя, дата рождения ...). Если два пользователя вошли в систему и редактируют свою информацию одновременно, то обе данные должны храниться в одной и той же таблице пользователей. Может ли это привести к тупиковой ситуации, поскольку оба обращаются к одной и той же таблице? Как Spring справляется с этим?

Обновлено:

Как я описал выше, у меня есть приложение, которое обрабатывает несколько задач, что иногда приводит к тупикам. Я хочу, чтобы они поставили в очередь, а затем обрабатывали каждую задачу асинхронно.

Я провел некоторое исследование и считаю, что лучшим решением было бы использовать шаблон "Производитель-потребитель" с ExecutorService с BlockingQueue, как описано в этой статье: https://allegro.tech/2015/05/thread-pools.html

Как вы думаете? Мне просто нужны идеи, подходит ли это решение для описания моей проблемы? Есть ли лучшие способы сделать это?

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

Turing85 22.04.2018 11:54

Обработка уведомлений вне очереди - не панацея от всех тупиковых ситуаций. Это просто означает, что обработка одного уведомления никогда не будет тупиковой с обработка другого уведомления.

Kevin Anderson 22.04.2018 12:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
130
0

Другие вопросы по теме