Executor.submit()和Executor.execute()这两个方法有什么区别?

此问题来自另外一篇文章,《15个最流行的java多线程面试问题》,现在对熟练掌握并发技能的开发者的需求越来越大,因此这个问题也越来越引起大家的重视。答案是:前者返回一个Future对象,可以通过这个对象来获得工作线程执行的结果。

当我们考察异常处理的时候,又会发现另外一个不同。当你使用execute提交的任务抛出异常时,此异常将会交由未捕捉异常处理过程来处理(uncaught exception handler),当你没有显式指定一个异常处理器的话,默认情况下仅仅会通过System.err打印出错误堆栈。当你用submit来提交一个任务的时候,这个任务一旦抛出异常(无论是否是运行时异常),那这个异常是任务返回对象的一部分。对这样一种情形,当你调用Future.get()方法的时候,这个方法会重新抛出这个异常,并且会使用ExecutionException进行包装。

你可能感兴趣的:(Java)