1:入参不同
excute() 传入的是 Runable,
submit 传入的是 Callable 或 Runable
1):execute 方法源码
public void execute(Runnable command) { ... }
2):submit方法源码
public Future<?> submit(Runnable task) { ... }
public <T> Future<T> submit(Runnable task, T result) { ... }
public <T> Future<T> submit(Callable<T> task) { ... }
2:回参不同
execute 无返回值,submit 有返回值
1):submit 底层调用的还是 execute 方法,传入Callable 也会转化为 Runable 并交给 execute方法处理。
2):对submit 方法返回的结果(Future)进行 get() 的时候会导致调用方阻塞,直至 submit 内部异常或成功返回结果。
3):submit 的异常封装在结果(Future)中,要调用 get() 方法才会抛出异常,否则无法抛出异常。