引言
前面介紹的鎖順序死鎖和協作對象間調用而引發的死鎖問題,都是因爲請求鎖而不得導致的,本文將介紹一種新的死鎖情況,它產生的直接原因不是得不到鎖,而是得不到資源,比如,線程池調度過程中,某個任務因得不到線程資源,一直等待、繼而 “餓死” 的一種死鎖情況。
這種死鎖常發生在單線程或者工作線程數特別小的線程池中, Timer
或者線程池大小爲 1 的 ThreadPoolExecutor
容易發生資源飢餓死鎖 ,一起來看看它的產生過程和破解方案吧。
線程飢餓死鎖概述
《Java併發編程實踐》中對線程飢餓死鎖的解釋是這樣的:
在使用線程池執行任務時,如果任務