Java Executor Service并不类似地处理



我试图使用执行人员服务来运行多个服务。但是我没有平行执行。

我已经写了 java.util.concurrent.timeunit.minutes.sleep(1)在Service1 class中等待一分钟。

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

下面是我的代码段

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()时,主线程将其调用。是的,它必须在有机会提交服务之前完成。

更新:

在您的原始帖子中,睡眠是在呼叫方法中,并且奏效了。现在,您的服务1等于:

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;
    }
}

只有呼叫方法由执行人运行。service1实例甚至在构造函数完成之前都无法提交。

相关内容

  • 没有找到相关文章

最新更新