繁体   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