3 回答

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊
據(jù)我分析線程轉(zhuǎn)儲(chǔ),當(dāng)您使用 Spring 等框架或其他庫(如您在此處使用的 Logback)時(shí)。他們根據(jù)您的配置創(chuàng)建線程池。例如,您可以在 applicationcontext.xml 或任何基于 java 的配置類中找到此類配置。因此,它的作用是,它將在應(yīng)用程序啟動(dòng)或第一次初始化調(diào)用時(shí)創(chuàng)建那么多線程。如果有任何任務(wù)到來,那么框架將從池中選擇一個(gè)線程并分配給它。任務(wù)完成后,線程將回到池中,此時(shí)線程狀態(tài)將是WAITING(正在停車)。這并不意味著它被任何線程阻塞。如果您的服務(wù)器有足夠的能力處理此類池,則不會(huì)導(dǎo)致任何性能問題。他們只是坐在理想的位置,因?yàn)樗麄儧]有任何任務(wù)要做。

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊
根據(jù)上面的堆棧跟蹤,有以下推論
有一個(gè)隊(duì)列Q。
N 個(gè)作業(yè)(可運(yùn)行)被添加到隊(duì)列中。
這些作業(yè)將從隊(duì)列中取出并由 ThreadPoolExecutors 中的線程執(zhí)行(可以緩存/動(dòng)態(tài))。
假設(shè),我們有一個(gè)只有兩個(gè)線程(固定大?。┑木€程池執(zhí)行器,并且您只向隊(duì)列提交了一個(gè)作業(yè)。(作業(yè)1)
Thread1從隊(duì)列中取出job1并執(zhí)行。一旦執(zhí)行結(jié)束,就會(huì)進(jìn)入WAITING狀態(tài),因?yàn)殛?duì)列中沒有元素。它沒有工作要做。堆棧跟蹤上存在等待線程并不意味著它們是有害的。

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可能要做的第一件事是搜索 Runnable 線程及其已鎖定的同步器??蛇\(yùn)行線程如果長時(shí)間掛起,則很有可能正在執(zhí)行 IO 或 DB 操作。以 30 秒左右的間隔進(jìn)行后續(xù)線程轉(zhuǎn)儲(chǔ)并進(jìn)行比較研究。
添加回答
舉報(bào)