未来正在停止其余的程序执行

时间:2017-06-14 18:57:02

标签: java multithreading future executorservice

我正在尝试从主线程并行执行2个作业但是如果回调方法需要很长时间才能给出响应,其余的请求都会暂停并等待先完成。

这是我的代码:

 private final ExecutorService executorService = Executors.newFixedThreadPool(10);

 private void executeService(String uuid) {
    System.out.println("query executed done: " + uuid);
} 

 private String getAsynchTest(final String uuid) throws Exception {
    testAsynchF = executorService.submit(
            new Callable<String>() {
                public String call() throws Exception {
                    executeService(uuid);
                    return getFutuerResult(uuid, Thread.currentThread()); // long processing
                }
            });
    return testAsynchF.get();
}

public String getFutuerResult(String uuid, Thread t) {
    String dummy = "your result for request: "+uuid;
     if (uuid.equalsIgnoreCase("112")) {
        try {
            t.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    return dummy;
}

 public static void main(String[] args) {
    SynchronousTimeoutTester tester = new SynchronousTimeoutTester();

    try {
        String one = "112"
        System.out.println("Result sync call:*** " + tester.getAsynchTest(one));

        String two = "115";
        System.out.println("Result sync call:**** " + tester.getAsynchTest(two));

    } catch (Exception e) {
        System.out.println("catched as Exception: " + e);
    }

 }

如果请求112线程暂停,为什么停止执行请求115?

1 个答案:

答案 0 :(得分:0)

由于您将Thread.currentThread()传递给getFutureResult并且该方法在其线程参数上调用join()(如果uuid为&#34; 112&#34;),该方法将等待它自己的线索结束,它不能等待它。