在編寫多線程代碼時,我們時常會用到線程池,以提高效率。那么線程池用完需不需要關閉呢?
如果是局部變量(即一次性使用),用完是要關閉的,否者大量的線程資源占用,會導致內存泄漏。
如果不想手動關閉,可以把線程池里的線程設為守護線程:
thread.setDaemon(true);
在這里之前還遇到過一個坑,我在項目測試時發現一個功能請求一次后,下一次請求必然會超時。后來想到是線程池的問題。因為我的線程池是全局的,其實不用關閉的,但是我在使用完后用了shutdown。但是線程池里的線程又設為了守護線程,也就是說要等到jvm關閉,線程池才會關閉掉,所以后面調用時就一直超時。