使用Guava FutureCallback接口的Java多线程编程

时间:2013-08-14 08:52:35

标签: java multithreading guava

我的问题与java多线程编程有关 我正在处理创建许多工人的主线程,每个工人都是一个线程 从工人到我用Callable和Future的主线程得到结果/错误。
我确实在guava FutureCallback接口中找到了来自worker的异常。
我的问题是如何使用它,因为我没有在网上找到任何例子。

谢谢!

1 个答案:

答案 0 :(得分:3)

以下是Integer结果的示例:

ListeningExecutorService executor = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(4));
int runs = 100;
for (int k=0; k < runs; k++) {
    Callable<Integer> job = ...; // create the job here
    ListenableFuture<Integer> completion = executor.submit(job);
    Futures.addCallback(completion, new FutureCallback<Integer>() {

        @Override
        public void onFailure(Throwable t) {
            // log error
        }

        @Override
        public void onSuccess(Integer result) {
            // do something with the result
        }

    });
}
executor.shutdown();
while (!executor.isTerminated()) {
    executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
}