是否有一个用例来使用从调用提交的运行时执行服务实例的提交获得的get对象

时间:2017-01-28 21:20:55

标签: java multithreading runnable executorservice

执行者服务有以下方法 -

Future<?> submit(Runnable task);

现在Runnable与Callabe不同,它不返回任何内容(返回类型为void)。因此,调用get on future对象会为提交的Runnable任务提供null。

    ExecutorService service = null;
    try {
    service = Executors.newSingleThreadExecutor();
    Future<?> result =  service.submit(() -> System.out.println("My 1st ThreadId : " + Thread.currentThread().getId()));
    System.out.println(result.get());
    } finally {
    if(service != null) service.shutdown();
    }

给出

My 1st ThreadId : 10
null

如果Runnable任务未结束,它可能会在返回null之前进行阻塞调用。想知道是否存在使用get对未来对象的实际用法,通过调用提交到执行服务来执行可运行任务。

2 个答案:

答案 0 :(得分:2)

最大的用例就是等待任务完成。通常如果你想要并行地踢掉几件东西并等待它们全部完成的话。

答案 1 :(得分:0)

如果您想确保Future.get()成功执行,则无需任何例外,调用Runnable即可。但是,如果发生异常,get()也会抛出(另一个)异常。