gpt4 book ai didi

Java 执行器服务未并行处理

转载 作者:行者123 更新时间:2023-12-02 03:01:09 26 4
gpt4 key购买 nike

我正在尝试使用 ExecutorService 并行运行多个服务。但我未能并行执行。

我已经编写了 java.util.concurrent.TimeUnit.MINUTES.sleep(1) 在 Service1 类中等待一分钟。

但是Service2仅在Service1处理后才进行处理。

下面是我的代码片段,如果我对ExecutorService的理解有误,请纠正我/代码

public void startService() {

try {
ExecutorService service = Executors.newFixedThreadPool(3);
service.submit(new Service1());
service.submit(new Service2());
service.submit(new Service3());

service.shutdown();
service.awaitTermination(1, TimeUnit.MINUTES);

System.exit(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

public class Service1 implements Callable<Object> {

{
try {
java.util.concurrent.TimeUnit.MINUTES.sleep(1);
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
public Object call() throws Exception {
return null;
}
}

public class Service2 implements Callable<Object> {

@Override
public Object call() throws Exception {
System.out.println(" Service 2 "); // It prints after 1 minute only.
return null;
}
}

public class Service3 implements Callable<Object> {

@Override
public Object call() throws Exception {
System.out.println(" Service 3 ");
return null;
}
}

最佳答案

代码:

{
try {
java.util.concurrent.TimeUnit.MINUTES.sleep(1);
} catch (Exception e) {
e.printStackTrace();
}
}

是一个构造函数,在主线程执行new Service1()时会调用它。所以是的,它必须在有机会提交服务之前完成。

更新:

在您原来的帖子中, sleep 位于调用方法中,并且它有效。现在,您的 Service1 相当于:

public class Service1 implements Callable<Object> {

public Service1() {
try {
java.util.concurrent.TimeUnit.MINUTES.sleep(1);
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
public Object call() throws Exception {
return null;
}
}

并且只有call方法是由执行器运行的。在构造函数完成之前,Service1 实例甚至无法提交。

关于Java 执行器服务未并行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42345383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com