Семафор с процессом операционной системы в Java

#java #process #semaphore

#java #процесс #семафор

Вопрос:

Я выполняю программу, используя Java ProcessBuilder, чтобы запустить ее как программу OS.

Запрос передается в очередь, откуда потребитель будет его использовать и запускать. Внутри потребителя я использовал семафор (8) и службу исполнителя для отправки запроса в виде потока.

Ниже приведен соответствующий код.

 ProcessBuilder bldr = new ProcessBuilder().command(commandArray);
bldr.redirectErrorStream(true);
process = bldr.start();
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String ch;
while ((ch = br.readLine()) != null) {
    output = output   ch;
}
br.close();
result = process.waitFor();
....
private static Semaphore semaphore;
private static ExecutorService threadExecutor;
....
semaphore = new Semaphore(8, true);
threadExecutor = Executors.newFixedThreadPool(8);
....
ExecutorWorkerThread thread = new ExecutorWorkerThread(request);
threadExecutor.submit(thread);
semaphore.acquire();
  

Теперь проблема заключается в том, что независимо от этого семафора (8) процессы выполняются один за другим, а не параллельно.

Ожидаю ли я правильного поведения и правильно ли поступаю? Пожалуйста, поправьте меня. Дайте мне знать, если потребуются какие-либо дополнительные сведения.

Комментарии:

1. чего вы на самом деле пытаетесь достичь? Я думаю, вам не нужно использовать семафор, но, возможно, вызываемый и будущий? Но это всего лишь предположение, поскольку я не могу сказать, что вы пытаетесь сделать. одновременно выполняется максимум 8 потоков?

2. Обновлен код. ExecutorWorkerThread фактически реализует Callable. Запросы поступают и помещаются в очередь. Оттуда они выбираются и обрабатываются. Все, что я хочу, это запустить 8 процессов параллельно. но эти потоки выполняются один за другим.