我想知道这两种方法之间的区别:
public static ExecutorService newFixedThreadPool(int nThreads)
和
public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory tf)
显然,需要一个指定的ThreadFactory来创建线程。不过我想知道前者使用什么样的标准ThreadFactory? 为什么使用后者而不是前者方便,反之亦然? 提前谢谢。
答案 0 :(得分:3)
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);
}
}
如需参考,请检查 - documentation并找到一个好answer。
答案 1 :(得分:1)
第一个使用Executors.defaultThreadFactory
创建第一个版本的线程。如果你不关心如何创建线程,你可以使用第一个版本;如果你需要在创建线程时在线程上强加一些自定义设置,你可以使用第二个版本。
答案 2 :(得分:1)
第一个使用DefaultThreadFactory,它是Executors的内部类。定义自己的ThreadFactory时,可以影响创建的线程。您可以选择他们的名字,优先级等。