为什么ExecutorService.submit(Runnable task)返回Future <?>而不是Future <Void>?

Rol*_*and 13 java multithreading asynchronous future executorservice

ExecutorService的有以下方法:

未来<?>提交(Runnable任务)

但是,由于这种Futureget方法将总是返回null不会以下签名更合适?

Future<Void> submit(Runnable task)

Bur*_*dız -1

因为ExecutorServiceFuture接口是为了从另一个线程获取返回数据而创建的,而不是仅仅为了运行它。 Future<Void> submit(Runnable task)与 的工作方式相同,对于某些情况,new Thread(runnable).start()返回是有意义的。null

编辑: 认为您需要在 20 分钟后关闭线程。当你有返回值时你会怎么做void

Future<Void> future = execService.submit(operation);
execService.shutdown();
opResult = future.get(20, TimeUnit.MINUTES);
Run Code Online (Sandbox Code Playgroud)

这段代码一定会报错,因为future. 但如果它返回 null,execService控制器对象就会知道shutdown发生了这种情况。或者如果 20 分钟内没有返回任何内容,execService.shutdownNow()则可以使用。