UNIX(多线程):23---线程池注意事项和常见问题
使用線程池的注意事項
死鎖
任何多線程程序都有死鎖的風險,最簡單的情形是兩個線程AB,A持有鎖1,請求鎖2,B持有鎖2,請求鎖1。(這種情況在mysql的排他鎖也會出現,不會數據庫會直接報錯提示)。線程池中還有另一種死鎖:假設線程池中的所有工作線程都在執(zhí)行各自任務時被阻塞,它們在等待某個任務A的執(zhí)行結果。而任務A卻處于隊列中,由于沒有空閑線程,一直無法得以執(zhí)行。這樣線程池的所有資源將一直阻塞下去,死鎖也就產生了。
系統(tǒng)資源不足
如果線程池中的線程數目非常多,這些線程會消耗包括內存和其他系統(tǒng)資源在內的大量資源,從而嚴重影響系統(tǒng)性能。
并發(fā)錯誤
線程池的工作隊列依靠wait()和notify()方法來使工作線程及時取得任務,但這兩個方法難以使用。如果代碼錯誤,可能會丟失通知,導致工作線程一直保持空閑的狀態(tài),無視工作隊列中需要處理的任務。因為最好使用一些比較成熟的線程池。
線程泄漏
使用線程池的一個嚴重風險是線程泄漏。對于工作線程數目固定的線程池,如果工作線程在執(zhí)行任務時拋出RuntimeException或Error,并且這些異常或錯誤沒有被捕獲,那么這個工作線程就異常終止,使線程池永久丟失了一個線程。(這一點太有意思)
另一種情況是,工作線程在執(zhí)行一個任務時被阻塞,如果等待用戶的輸入數據,但是用戶一直不輸入數
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的UNIX(多线程):23---线程池注意事项和常见问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于遍历linux的文件目录的坑- re
- 下一篇: CE游戏外挂工具