【发布时间】:2022-01-19 12:02:19
【问题描述】:
我是 Java 并发和线程的新手,我有以下场景 -
Function1(从队列中获取下一个任务并使用任务调用 function2)然后 Function2(调用 Function Run 来运行这个任务)然后 运行(函数运行是使用具有固定线程池的执行器服务提交任务,代码如下)
ExecutorService exeService = Executors.newFixedThreadPool(3);
private void run(Task task){
Abstract batchExecutor = getBatchExecutor(param1,param2, param3, param4, task);
Future<Void> future = exeService.submit(batchExecutor);
while (!future.isDone()) {
if (isStopRequested.get()) {
try {
future.get(5, TimeUnit.MINUTES);
} catch (TimeoutException e) {
e.printStackTrace();
}
throw new InterruptedException("message");
}
Thread.sleep(3000);
}
future.get();
Map<String, Result> submittedObjects = batchExecutor.getSubmittedObjects();
storeSubmittedObjects(submittedObjects);
}
我的问题是,即使在声明了线程池之后,任务仍在按顺序运行。我怎样才能让它并行,以便一旦有另一个运行调用它应该使用池中的空闲线程并提交任务?
所有这些函数都没有返回类型。
【问题讨论】:
标签: java multithreading concurrency executorservice parallelism-amdahl