本文講一下Java線程池中創建 ThreadFactory 設置線程名稱的三種方式。設置線程名稱是很重要的,如果你沒有設置過,說明你還“澀世”不深,這裏面的坑還不曾踩過,而我 在坑裏進去然後坑裏出來,被坑的那是一個相當的爽啊~
爲了讓不重蹈我的覆轍,爲了未來不說起來都是滿眼含着“熱淚”,還是看下如何設置,順便也設置設置。
第一種 CustomizableThreadFactory
Spring 框架提供的 CustomizableThreadFactory
。
ThreadFactory springThreadFactory = new CustomizableThreadFactory("springThread-pool-");
ExecutorService exec = new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(10),springThreadFactory);
exec.submit(() -> {
logger.info("--記憶中的顏色是什麼顏色---");
});
第二種 ThreadFactoryBuilder
Google guava 工具類 提供的 ThreadFactoryBuilder
,使用鏈式方法創建。
ThreadFactory guavaThreadFactory = new ThreadFactoryBuilder().setNameFormat("retryClient-pool-").build();
ExecutorService exec = new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(10),springThreadFactory);
exec.submit(() -> {
logger.info("--記憶中的顏色是什麼顏色---");
});
第三種 BasicThreadFactory
Apache commons-lang3 提供的 BasicThreadFactory
.
ThreadFactory basicThreadFactory = new BasicThreadFactory.Builder()
.namingPattern("basicThreadFactory-").build();
ExecutorService exec = new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(10),springThreadFactory);
exec.submit(() -> {
logger.info("--記憶中的顏色是什麼顏色---");
});
總結
最終本質都是 給 java.lang.Thread#name 設置名稱,詳情源碼感興趣的可以自行查看。
final Thread thread = new Thread();
thread.setName(name);
本文完~