面试题答案
一键面试功能
- execute:用于提交不需要返回值的任务,仅负责将任务添加到线程池的工作队列中,由线程池中的线程执行该任务。
- submit:不仅可以提交不需要返回值的任务,还可以提交需要返回值的任务。对于需要返回值的任务,它会返回一个
Future
对象,通过该对象可以获取任务的执行结果。
返回值
- execute:方法没有返回值。
- submit:方法返回一个
Future
对象。若提交的任务有返回值,可通过Future
的get()
方法获取任务执行结果;若提交的任务无返回值(Runnable
任务),返回的Future
的get()
方法返回null
。
异常处理机制
- execute:当任务执行出现异常时,如果没有在任务内部进行处理,会按照线程池的默认异常处理机制处理,通常是将异常堆栈信息输出到控制台。因为
execute
没有返回值,无法通过返回值获取异常,需要在Runnable
实现类的run
方法中自行捕获处理异常。 - submit:提交的任务执行过程中抛出异常,不会直接抛出。可以通过
Future
的get()
方法获取任务执行结果时,如果任务执行过程中抛出异常,get()
方法会将该异常重新抛出(ExecutionException
或InterruptedException
等包装异常),调用者可以在调用get()
方法的地方捕获并处理异常。