[英]Differences between these 2 factory methods
我想知道這兩種方法之間的區別:
public static ExecutorService newFixedThreadPool(int nThreads)
和
public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory tf)
顯然,需要使用指定的ThreadFactory來創建線程。 但是我想知道以前使用哪種標准的ThreadFactory? 為什么使用后者而不是前者方便,反之亦然? 提前致謝。
DefaultThreadFactory
,
使用ThreadFactory創建新線程。 如果沒有另外指定,則使用Executors.defaultThreadFactory(),該線程創建的線程全部位於相同的java.lang.ThreadGroup中,並且具有相同的NORM_PRIORITY優先級和非守護程序狀態。 通過提供不同的ThreadFactory,可以更改線程的名稱,線程組,優先級,守護程序狀態等。如果ThreadFactory在通過從newThread返回null返回要求時未能創建線程,執行器將繼續執行,但可能無法執行執行任何任務。 線程應具有“ modifyThread” RuntimePermission。 如果使用該池的工作線程或其他線程不具有此權限,則服務可能會降級:配置更改可能不會及時生效,並且關閉池可能保持在可能終止但未完成的狀態。
參考 -
但是,您可以將線程創建封裝在ThreadFactory
,這實際上是Factory pattern
用法。
例如 -
class SimpleThreadFactory implements ThreadFactory {
public Thread newThread(Runnable r) {
// do something
return new Thread(r);
}
}
第一個使用Executors.defaultThreadFactory
創建具有第一個版本的線程。 如果您不關心線程的創建方式,則可以使用第一個版本;如果需要在創建線程時強加一些自定義設置,則可以使用第二個版本。
第一個使用DefaultThreadFactory ,它是Executors的內部類。 當定義自己的ThreadFactory時 ,可以影響創建的線程。 您可以選擇其名稱,優先級等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.