1

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

public static ExecutorService newFixedThreadPool(int nThreads)

public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory tf)

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

4

3 回答 3

3

DefaultThreadFactory,

使用 ThreadFactory 创建新线程。如果没有另外指定,则使用 E​​xecutors.defaultThreadFactory(),它创建的线程都在相同的 java.lang.ThreadGroup 中,并且具有相同的 NORM_PRIORITY 优先级和非守护程序状态。通过提供不同的 ThreadFactory,您可以更改线程的名称、线程组、优先级、守护程序状态等。如果 ThreadFactory 在从 newThread 返回 null 时未能创建线程,则执行程序将继续,但可能无法执行任何任务。线程应该拥有“modifyThread”RuntimePermission。如果工作线程或使用池的其他线程不具备此权限,服务可能会降级:配置更改可能无法及时生效,

参考-

但是您可以将线程创建封装在您ThreadFactoryFactory pattern.

例如 -

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

作为参考,请检查文档并找到一个好的答案

于 2013-07-25T11:44:24.223 回答
1

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

于 2013-07-25T11:45:49.907 回答
1

第一个用于使用Executors.defaultThreadFactory第一个版本创建线程。如果您不关心线程是如何创建的,您将使用第一个版本,如果您需要在创建线程时对其进行一些自定义设置,则使用第二个版本。

于 2013-07-25T11:43:38.787 回答