线程池的execute方法和submit方法都可以用来提交任务,但是它们有一些区别:
1.执行返回值:execute方法没有返回值,submit方法有返回值。
2.异常处理:execute方法中如果出现异常会直接抛出,交给上层调用处理;submit方法中如果出现异常则会包装为ExecutionException返回给上层调用。
3.任务类型:execute方法只能提交Runnable类型的任务,submit方法既可以提交Runnable类型的任务,也可以提交Callable类型的任务。
4.参数传递:execute方法只能接收Runnable类型的参数,而submit方法可以接收Runnable或Callable类型的参数,submit方法还可以通过参数返回执行结果。
一般情况下,如果只需要提交一个无返回值的任务,可以使用execute方法;如果需要提交一个有返回值的任务,可以使用submit方法。如果需要任务返回值,并且希望在任务抛出异常时立即得知,可以使用submit方法,因为它能够将异常信息包装为ExecutionException返回。