2013-11-15 89 views
1

我正在阅读有关ThreadPoolExecutor的Oracles文档,特别是有关比线程可用的请求数多的情况下的排队。但是我没有找到默认设置。java ThreadPoolExecutor默认

实例化执行人我唯一能做的是:

executor = Executors.newFixedThreadPool(numberOfThreads); 

其中执行从java.util.concurrent.ExecutorService中和实施者是java.util.concurrent.Executors给出的一个。

从那里遗嘱执行人再次出现的唯一行是:

executor.execute(worker); 

所以你看,我从来没有对执行程序使用的队列类型或大小的任何财产。

我想知道的是正在使用我链接的文档中描述的哪种策略。

正如我所示的实现:我是否使用无界队列?它是否有界?如果是这样,默认大小是多少?

回答

1

你只需要阅读the javadoc

公共静态的ExecutorService的newFixedThreadPool(INT来确定nthreads)

创建一个可重用的共享无界队列操作线程的固定数量的线程池。在任何时候,最多nThreads线程都将被激活处理任务。如果在所有线程处于活动状态时提交其他任务,则它们将在队列中等待,直到线程可用。

(重点煤矿)

如果你想最大的灵活性,可以使用ThreadPoolExecutor的构造函数,可以让你选择你想要的每一个细节。

0

见执行人SRC

public static ExecutorService newFixedThreadPool(int nThreads) { 
     return new ThreadPoolExecutor (nThreads, nThreads, 
             0L, TimeUnit.MILLISECONDS, 
             new LinkedBlockingQueue <Runnable >()); 
} 

,我们可以看到它是无界的LinkedBlockingQueue