当所有线程都在使用时,如何增加newFixedThreadPool或newScheduledThreadPool中的线程数?

时间:2017-02-21 09:47:29

标签: java multithreading

我想知道当所有线程都在使用时,是否有办法增加 FixedThreadPool ScheduledThreadPool 中的线程数。 这是针对 Example1:假设我们采用大小为5的 FixedThreadPool ,当所有线程都处于使用状态时,需要完成的另一个任务或功能必须等待一个自由的线程。我需要避免这种情况,并且线程数必须动态增加而不使用 CachedThreadPool。 这样做有什么办法吗?

例2:

ScheduledExecutorService execService =  Executors.newScheduledThreadPool(1);

我已将上面示例2中的线程数限制为1.现在,当此线程忙于执行某项任务时,要完成的其他任务必须等待吗? 现在我想要:这个固定数量的线程必须动态增加。 无论如何这样做了吗?

2 个答案:

答案 0 :(得分:2)

实际上只有一个类实现了名为import AsiaHeaderComponent from "components/AsiaHeaderComponent.jsx"; import AustraliaHeaderComponent from "components/AustraliaHeaderComponent.jsx"; const componentOf = { aisa: AsiaHeaderComponent, australia: AustraliaHeaderComponent }; class Home extends React.Component { renderHeader(){ return componentOf[this.props.location] } render(){ return ( { this.renderHeader() } ) } }的ScheduledExecutorService。这有两个参数来定义它可以拥有的线程数,即核心线程池(或最小大小)和最大线程池大小。

固定线程池工厂方法创建此类的实例,其中最小值和最大值相同。

缓存线程池工厂方法创建一个最小为0且没有实际最大值的实例。

如果你想要一个动态线程池大小我建议你设置一个你认为合适的最大值和最小值。无论是创建实例目录还是使用固定/缓存的线程池都没有太大的区别。

答案 1 :(得分:0)

ScheduledExecutorService execService = Executors.newScheduledThreadPool(1);

没有。这里ScheduledExecutorService不会产生新的线程。

你必须去newCachedThreadPool