簡體   English   中英

這兩種工廠方法之間的差異

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM