Каков наилучший способ обрабатывать список объектов одновременно различными классами - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь обрабатывать список объектов одновременно с разными классами, но я не уверен, что я иду в правильном направлении.Я прочитал о ExecutorService и Parallel stream, но не уверен, что это правильный путь.

Итак, приведу пример:

У меня есть издатель, который собирает данные и размещаетэто в списке.С издателем связано несколько подписчиков, которым необходимо обработать данные и сохранить их на карте.Затем карта строится до тех пор, пока все данные не будут обработаны, а затем сохранена в таблице базы данных.У каждого подписчика есть своя собственная таблица, которую необходимо в той или иной форме заполнить предоставленными данными.То, что я пытаюсь выполнить, - это одновременное распространение списка среди подписчиков, и как только все подписчики закончат обработку, будут предоставлены данные следующего зачета и т. Д., Пока все данные не будут обработаны для диапазона дат.

Если у кого-нибудь есть какие-то предложения, на которые я могу взглянуть, это было бы замечательно.

1 Ответ

0 голосов
/ 27 июня 2019

Я бы начал так:

  • Publisher
    • не собирать в список, а просто сделать его Наблюдаемым и заставить всех подписчиков наблюдатьему.
    • В каждой партии инициализируйте CountDownLatch до размера партии и ждите, пока он не очистит вас.
  • Подписчик
    • должны наблюдать события интересующего их типа в другом потоке (только по одному для каждого типа)
    • и по окончании обработки события - они должны уведомлять CDL издателя.
  • Publisher
    • после завершения всех событий и освобождения CDL должны сохранить результаты в db
    • и затем перейти к следующему пакету

Теперь все это является предложением с множеством других возможных решений, причем очень высокого уровня со многими деталями реализации, оставленными невысказанными.Во время работы вы должны держать глаза открытыми и не бояться менять маршруты, если это лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...