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() 方法纔會拋出異常,否則無法拋出異常。