給執行緒池取一個名稱有助於除錯 - bozho
我們的軟體傾向於使用大量執行緒池-主要是透過java.util.concurrent.ExecutorService實現(透過建立Executors.new...。我們為各種非同步用例建立執行緒池,並且可以在各處看到它們。所有這些執行器都有執行緒工廠。它隱藏在預設的工廠方法,但您可以提供執行緒工廠;如果未提供,則在需要執行緒時使用預設的執行緒工廠。
使用spring時,可以使用建立<task:executor />。在這種情況下,每個執行程式服務的執行緒工廠由spring提供,並且使用執行程式bean的名稱(用指定id="executorName")。但是對於不是由spring建立的那些,將使用預設名稱,這是沒有幫助的,並且不允許您按名稱區分執行緒。
按名稱區分執行緒好處:如果遇到效能問題,您可以研究各種選項:執行緒轉儲和使用top命令。我最喜歡的快速調查工具是top。更確切地說,top -H -p <pid>。這顯示了通常的頂部表,但是-H標誌意味著應該按名稱列印用於所選程式的執行緒。
按名稱可以獲得最多的CPU繁忙且當前處於活動狀態的執行緒。在這些情況下,擁有自定義名稱非常有用。
但是,您如何設定名稱?透過在建立每個執行程式時指定一個命名執行緒工廠。這是一個有多種實現執行緒命名的方法的stackoverflow答案。
我使用的方法基於第二個答案:
public class AsyncUtils { public static ThreadFactory createNamedThreadFactory(String name) { return new ThreadFactoryBuilder().setNameFormat(name + "-%d").build(); } } |
並不是每個人都在使用Spring,有時,甚至一小部分功能甚至都可以在Spring bean之外使用執行者。因此,最好是採用這種方法。
相關文章
- Java執行緒池一:執行緒基礎Java執行緒
- 六、執行緒池(一)執行緒
- 手寫一個執行緒池,帶你學習ThreadPoolExecutor執行緒池實現原理執行緒thread
- 建立一個執行緒池配置類 ThreadPoolConfig執行緒thread
- 手動造一個執行緒池(Java)執行緒Java
- Java執行緒池二:執行緒池原理Java執行緒
- 執行緒和執行緒池執行緒
- 執行緒 執行緒池 Task執行緒
- 多執行緒【執行緒池】執行緒
- Netty原始碼解析一——執行緒池模型之執行緒池NioEventLoopGroupNetty原始碼執行緒模型OOP
- 執行緒(一)——執行緒,執行緒池,Task概念+程式碼實踐執行緒
- java-執行緒池(一)Java執行緒
- Java 執行緒池獲取池中所有執行緒列表的方法Java執行緒
- 執行緒池的建立和使用,執行緒池原始碼初探(篇一)執行緒原始碼
- 執行緒池執行緒
- 死磕 java執行緒系列之自己動手寫一個執行緒池Java執行緒
- java 執行緒池執行緒忙碌且阻塞佇列也滿了時給一個拒接的詳細報告Java執行緒佇列
- 執行緒池以及四種常見執行緒池執行緒
- java執行緒池趣味事:這不是執行緒池Java執行緒
- 高併發面試:執行緒池的七大引數?手寫一個執行緒池?面試執行緒
- java--執行緒池--建立執行緒池的幾種方式與執行緒池操作詳解Java執行緒
- 二. 執行緒管理之執行緒池執行緒
- Android多執行緒之執行緒池Android執行緒
- kuangshenshuo-多執行緒-執行緒池執行緒
- 多執行緒之手撕執行緒池執行緒
- java多執行緒9:執行緒池Java執行緒
- 執行緒池管理(1)-為什麼需要執行緒池執行緒
- 一步步瞭解執行緒池之基本執行緒池-ThreadPoolExecutor執行緒thread
- Android執行緒池Android執行緒
- java 執行緒池Java執行緒
- Java執行緒池Java執行緒
- ThreadPool執行緒池thread執行緒
- 執行緒池 Executor執行緒
- 利用執行緒池給客戶端傳檔案執行緒客戶端
- 執行緒與執行緒池的那些事之執行緒池篇(萬字長文)執行緒
- 對於es執行緒池使用的思考執行緒
- 關於執行緒池的面試題執行緒面試題
- 執行緒池之ScheduledThreadPoolExecutor執行緒池原始碼分析筆記執行緒thread原始碼筆記