Java 1.6 - 从执行程序服务线程返回Main类

时间:2015-04-16 14:06:06

标签: java multithreading executorservice threadpoolexecutor

我通过使用Executor Service创建3个线程(扩展Runnable)并提交它们,从我的Main类执行三个任务。如下所示:

    ExecutorService executor = Executors
                        .newFixedThreadPool(3);

                A a= new A();
                B b= new B();
                C c= new C();

                /**
                 * Submit/Execute the jobs
                 */
                executor.execute(a);
                executor.execute(b);
                executor.execute(c);
                try {
                    latch.await();
                } catch (InterruptedException e) {
                    //handle - show info
                    executor.shutdownNow();
                }

当线程中发生异常时,我抓住它并执行System.exit(-1)。但是,如果发生任何异常,我需要返回主类并在那里执行一些语句。这该怎么做?我们可以在没有FutureTask的情况下从这些线程中返回一些内容吗?

2 个答案:

答案 0 :(得分:5)

使用execute返回run,而不是通过submit提交任务,而这项任务无法在Future<?>方法之外捕获异常。然后,您可以致电get,如果出现问题,可能会返回ExecutionException

Future<?> fa = executor.submit(a);
try {
    fa.get();  // wait on the future
} catch(ExecutionException e) {
    System.out.println("Something went wrong: " + e.getCause());
    // do something specific
}

答案 1 :(得分:0)

您可以实施自己的&#34; FutureTask&#34; class并将其作为A&#39;构造函数的参数:

MyFutureTask futureA = new MyFutureTask();
A a = new A(futureA);

每当A中发生错误时,您都会将返回值存储在MyFutureTask中,然后可以使用正常的FutureTask读取它。