ThreadPoolExecutor中execute和submit的區別

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章