Есть очередь задач, которая запускается ThreadPoolExecutor-ом. Появилась необходимость добавить иерархическую блокировку.
Допустим, мы имеем в очереди задачи, делающие рассчеты на разных уровнях данных бизнес логики. A -> B -> C. Т.е. если выполняется задача с данными A, то, автоматически, B и C находятся в ожидании. Аналогично, как это реализовано в СУБД через механизм Multi-Granular Lock: файлы -> страницы -> записи.
1) Есть ли какие-то Java-библиотеки, позволяющие делать иерархическую блокировку?
2) Для большой очереди будет нецелесообразно порождать потоки и блокировать их, используя системные локи. Есть ли какое-то решение, чтобы описать зависимость исполняемых задач, хранить их в очереди как в Executor-е, и вызывать их только когда зависимые задачи завершат свою работу?
В данный момент в сети смог найти лишь несколько статей с теорией, возможно, кто-то уже решил подобную проблему.
Я вижу зависимость задач друг от друга (через данные). Пусть завершив свою работу, задача A запускает задачи B и C и никаких блокировок.
Или можно иметь некоторое хранилище данных и некоторую совокупность обработчиков воздействующих на данные н-р:
Один обработчик берет объекты типа Order у которых состояние NEW ставит им состояние CHECKED или FRAUD по какой-то своей логике.
Другой обработчик берет Order в состоянии CHECKED проводит транзакцию и ставит PAID или NOT_PAID. И т.д.
Архитектурный шаблон Blackboard_system.