@Biox

Иерархическая блокировка и Executor-ы в Java?

Есть очередь задач, которая запускается ThreadPoolExecutor-ом. Появилась необходимость добавить иерархическую блокировку.

Допустим, мы имеем в очереди задачи, делающие рассчеты на разных уровнях данных бизнес логики. A -> B -> C. Т.е. если выполняется задача с данными A, то, автоматически, B и C находятся в ожидании. Аналогично, как это реализовано в СУБД через механизм Multi-Granular Lock: файлы -> страницы -> записи.


1) Есть ли какие-то Java-библиотеки, позволяющие делать иерархическую блокировку?


2) Для большой очереди будет нецелесообразно порождать потоки и блокировать их, используя системные локи. Есть ли какое-то решение, чтобы описать зависимость исполняемых задач, хранить их в очереди как в Executor-е, и вызывать их только когда зависимые задачи завершат свою работу?


В данный момент в сети смог найти лишь несколько статей с теорией, возможно, кто-то уже решил подобную проблему.
  • Вопрос задан
  • 3457 просмотров
Пригласить эксперта
Ответы на вопрос 2
SamSol
@SamSol
Я вижу зависимость задач друг от друга (через данные). Пусть завершив свою работу, задача A запускает задачи B и C и никаких блокировок.

Или можно иметь некоторое хранилище данных и некоторую совокупность обработчиков воздействующих на данные н-р:
Один обработчик берет объекты типа Order у которых состояние NEW ставит им состояние CHECKED или FRAUD по какой-то своей логике.
Другой обработчик берет Order в состоянии CHECKED проводит транзакцию и ставит PAID или NOT_PAID. И т.д.
Архитектурный шаблон Blackboard_system.
Ответ написан
Комментировать
tonyvelichko
@tonyvelichko
Я бы посоветовал Akka.io.
EventA -> ОбработчикA -> EventB -> ОбработчикB

На каждого обработчика можно отдельно настроить корзину и количество потоков. Есть возможность организации роутеров событий, akka.io/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы