Java中带OS进程的信号量

Java中带OS进程的信号量,java,process,semaphore,Java,Process,Semaphore,我正在使用Java的ProcessBuilder执行一个程序,以便将其作为操作系统程序运行 请求正被推送到一个队列,消费者将从该队列消费并运行该请求。在使用者内部,我使用信号量(8)和执行器服务作为线程提交请求 下面是相应的代码 ProcessBuilder bldr = new ProcessBuilder().command(commandArray); bldr.redirectErrorStream(true); process = bldr.start(); BufferedReade

我正在使用Java的ProcessBuilder执行一个程序,以便将其作为操作系统程序运行

请求正被推送到一个队列,消费者将从该队列消费并运行该请求。在使用者内部,我使用信号量(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),进程都是一个接一个地执行的,而不是并行执行的


我是否期待正确的行为和做正确的事情?请纠正我。如果需要任何其他详细信息,请告诉我。

您真正想要实现的是什么?我认为你不需要使用信号量,但可能是一个可调用的未来?但这只是一个猜测,因为我不知道你想做什么。一次最多运行8个线程?更新了代码。ExecutorWorkerThread实际上实现了Callable。请求传入并放入队列中。从那里,这些被提取和处理。我只想并行运行8个进程。但是这些线程是一个接一个地执行的。你到底想实现什么?我认为你不需要使用信号量,但可能是一个可调用的未来?但这只是一个猜测,因为我不知道你想做什么。一次最多运行8个线程?更新了代码。ExecutorWorkerThread实际上实现了Callable。请求传入并放入队列中。从那里,这些被提取和处理。我只想并行运行8个进程。但是这些线程是一个接一个地执行的。