1. 程式人生 > >執行緒池中shutdown()和shutdownNow()方法的區別

執行緒池中shutdown()和shutdownNow()方法的區別

shutDown()

    當執行緒池呼叫該方法時,執行緒池的狀態則立刻變成SHUTDOWN狀態。此時,則不能再往執行緒池中新增任何任務,否則將會丟擲RejectedExecutionException異常。但是,此時執行緒池不會立刻退出,直到新增到執行緒池中的任務都已經處理完成,才會退出。

shutdownNow()

     根據JDK文件描述,大致意思是:執行該方法,執行緒池的狀態立刻變成STOP狀態,並試圖停止所有正在執行的執行緒,不再處理還在池佇列中等待的任務,當然,它會返回那些未執行的任務。
     它試圖終止執行緒的方法是通過呼叫Thread.interrupt()方法來實現的,但是大家知道,這種方法的作用有限,如果執行緒中沒有sleep 、wait、Condition、定時鎖等應用, interrupt()方法是無法中斷當前的執行緒的。所以,ShutdownNow()並不代表執行緒池就一定立即就能退出,它可能必須要等待所有正在執行的任務都執行完成了才能退出。