執行緒池 如何正確的關閉執行緒池

2022-09-19 20:12:14 字數 946 閱讀 8749

在呼叫這個關閉方法時,執行緒池會根據我們配置的拒絕策略來拒絕掉想要進來的執行緒,也就是說吧建立執行執行緒的入口給關閉掉了,直到執行緒池內的所有執行緒都執行完成。在呼叫這個方法完畢之後,並不代表這個執行緒池就真的都停掉了,只能說他不讓其他執行緒進來了,然後等到執行緒池內的執行緒執行完。

shutdownnow相對於shutdown的加強版,因為他可以加快執行緒的執行的的關閉速度,通過向執行緒池中的執行緒傳送interrupt中斷訊號來達到讓執行緒盡快結束的目的,於此同時也會和shutdown方法一樣,根據拒絕策略來拒絕掉想要進來的執行緒。

這個方法就是用來判斷我們執行緒是否開始執行了shutdown方法,當沒有呼叫shutdown方法時,isshutdown返回的false,如果呼叫了shutdown方法,這個時候isshutdown返回的則是ture,值的注意的是,當isshutdown返回true並不代表這個執行緒池是關閉狀態了,這個方法只代表著執行緒有沒有開始執行執行緒關閉的方法。

isterminated就表示著執行緒池還有沒有執行緒正在執行,如果當還有執行緒未執行完成,那麼他就會返回false,當執行緒中所有的任務都執行完成了,那麼他才會返回ture。他跟isshutdown不同的是,isshutdown方法表示有沒有開始停止執行緒池任務,而isterminated表示的是,停止執行緒池的任務有沒有執行完成。

與isterminated不同的是,awaittermination有乙個等待時間,如果將等待時間設定為10s,那麼在執行這個方法後,awaittermination方法會等待10s,如果10s內所有的執行緒都執行完成了,他就會提前返回ture,反之如果到了10s後所有的方法還沒有執行完畢,則會返回false。在等待的同時,如果當先等待的執行緒收到了interrupt中斷訊號,同樣的他也會跑出interrupt的異常。

上面結束的五個方法,其實都是很好的去解決我們業務中常見的停止執行緒的場景。只要我們將這些方法的作用吃透。在停止執行緒池的時候,根據我們自己需要的場景來去停止,這樣其實就可以達到了正確停止執行緒池的目的了。

正確關閉執行緒池

使用10個固定執行緒池建立100個任務 executorservice service executors.newfixedthreadpool 10 for int i 0 i 100 i threadpoolexecutor中關閉執行緒池的方法 shutdown 可以安全地關閉乙個執行緒池,呼叫...

執行緒池 如何正確的配置乙個執行緒池

我們在建立自己的執行緒池時,會時常因為不知道給核心執行緒數或者最大執行緒數設定多少為好,其實這個時需要看你的執行緒池的使用場景和伺服器cup的配置,根據這些前置條件,我們再去判斷如何去設定合適的執行緒數,並不是我們想設定多少執行緒數大小就可以設定多少,這樣可能會導致執行緒發揮不到最大的效能,甚至還有...

你知道如何安全正確的關閉執行緒池嗎?

純潔的微笑 我們知道應用停機時需要釋放資源,關閉連線,而對於一些定時任務或者網路請求服務會使用執行緒池,當應用停機時我們需要正確安全的關閉執行緒池,如果處理不當,可能造成資料丟失,業務請求結果不正確等問題。關閉執行緒池我們可以選擇什麼都不做,jvm 關閉時自然的會清除執行緒池物件。當然這麼做,存在很...