關於守護執行緒與執行緒池的關閉 shutdown

2022-05-01 14:42:08 字數 332 閱讀 8133

在編寫多執行緒**時,我們時常會用到執行緒池,以提高效率。那麼執行緒池用完需不需要關閉呢?

如果是區域性變數(即一次性使用),用完是要關閉的,否者大量的執行緒資源占用,會導致記憶體洩漏。

如果不想手動關閉,可以把執行緒池裡的執行緒設為守護執行緒:

thread.setdaemon(true);

在這裡之前還遇到過乙個坑,我在專案測試時發現乙個功能請求一次後,下一次請求必然會超時。後來想到是執行緒池的問題。因為我的執行緒池是全域性的,其實不用關閉的,但是我在使用完後用了shutdown。但是執行緒池裡的執行緒又設為了守護執行緒,也就是說要等到jvm關閉,執行緒池才會關閉掉,所以後面呼叫時就一直超時。

執行緒 守護執行緒與非守護執行緒

什麼是守護執行緒?非守護執行緒好理解,就是程式中前端執行的執行緒,我個人理解為常用於處理主動事務的執行緒。守護執行緒 顧名思義,用來守護處理事務的執行緒。它主要執行在程式後端,最有代表的例子gc執行緒,就是守護執行緒。守護執行緒的特點 實現守護執行緒,驗證非守護執行緒結束時,守護執行緒也中斷。cre...

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

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

正確關閉執行緒池

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