Задать вопрос

Как вызвать одну программу из другой в java и их синхронизирвать?

Есть основная программа "А", которая работает в несколько потоков. Есть программа "Б", которую я хочу запустить в каждом из потоков программы "А", но эти запуски происходят в разное время. У Программы "Б" один поток, по этому хочу, чтобы программа "Б" обрабатывала каждый вызов программы "А" по очереди, вприницпе допустимо запускать несколько поток в программе "Б", если это облегчит задачу, но эти потоки надо формировать динамически, в соответствии с вызовом данной программы из "А".
Как все это сделать?
Можно запустить программу "Б" из программы
"А" Runtime.getRuntime().exec, но ей параметры как передать, и уж тем более синхронизирвать я думаю не выйдет с помощью этого. Можно через консоль запускать программу "Б", и передавать ей параметры, но каким образом вызывать программу "Б" так, чтобы она не повторно запускалась, а вызывалась уже запущаная программа "Б" только с другими параметрами. В общем много мыслей, но не одной, как мне кажется верной.
Две программы необходимо, посколько в первой программе нельзя некоторые действия реализовать, т.к она написана немного не на java по этому некоторые библиотеки не доступны в ней.
  • Вопрос задан
  • 271 просмотр
Подписаться 3 Простой Комментировать
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Используйте какой-нибудь брокер очередей - RabbitMQ, ActiveMQ, Redis и т.п. Потоки программы А отправляют в очередь данные, поток программы Б получает их из очереди и обрабатывает.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Самое простое - использовать redis и его RPUSH/LPUSH - BLPOP/BRPOPLPUSH
https://redis.io/commands/blpop

Процессы (продюссеры) кладут в очередь командами
RPUSH myqueue 123

Jedis jedis = new Jedis("localhost");
jedis.rpush("myqueue","123");


А исполнитель висит на соединении на команде
BLPOP myqueue

Jedis jedis = new Jedis("localhost");
List<String> mykeys = jedis.blpop("myqueue");


И да, исполнителей может быть несколько.

Ну и замечательная библиотека-клиент для явы https://github.com/xetorthio/jedis
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект