执行者服务有以下方法 -
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对未来对象的实际用法,通过调用提交到执行服务来执行可运行任务。
答案 0 :(得分:2)
最大的用例就是等待任务完成。通常如果你想要并行地踢掉几件东西并等待它们全部完成的话。
答案 1 :(得分:0)
如果您想确保Future.get()
成功执行,则无需任何例外,调用Runnable
即可。但是,如果发生异常,get()
也会抛出(另一个)异常。