这两种工厂方法之间的差异

时间:2013-07-25 11:39:13

标签: java threadpool factory

我想知道这两种方法之间的区别:

public static ExecutorService newFixedThreadPool(int nThreads)

public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory tf)

显然,需要一个指定的ThreadFactory来创建线程。不过我想知道前者使用什么样的标准ThreadFactory? 为什么使用后者而不是前者方便,反之亦然? 提前谢谢。

3 个答案:

答案 0 :(得分:3)

DefaultThreadFactory

  

使用ThreadFactory创建新线程。如果没有,否则   如果指定,则使用Executors.defaultThreadFactory()创建   所有的线程都在同一个java.lang.ThreadGroup中   NORM_PRIORITY优先级和非守护程序状态。通过提供不同的   ThreadFactory,你可以改变线程的名称,线程组,   优先级,守护程序状态等。如果ThreadFactory无法创建   当从newThread返回null要求时,执行程序将执行   继续,但可能无法执行任何任务。线程应该   拥有“modifyThread”RuntimePermission。如果工作线程或   使用该池的其他线程不具备此权限,服务   可能会降级:配置更改可能不会及时生效   方式,关闭池可以保持终止状态   可能但没有完成。

Reference -

但是您可以将线程创建封装在ThreadFactory中,Factory pattern的实际使用情况。

例如 -

 class SimpleThreadFactory implements ThreadFactory {
   public Thread newThread(Runnable r) {
     // do something 
     return new Thread(r);
   }
 }

如需参考,请检查 - documentation并找到一个好answer

答案 1 :(得分:1)

第一个使用Executors.defaultThreadFactory创建第一个版本的线程。如果你不关心如何创建线程,你可以使用第一个版本;如果你需要在创建线程时在线程上强加一些自定义设置,你可以使用第二个版本。

答案 2 :(得分:1)

第一个使用DefaultThreadFactory,它是Executors的内部类。定义自己的ThreadFactory时,可以影响创建的线程。您可以选择他们的名字,优先级等。