Executor ScheduledThreadPool"更多"的影响是什么?线程池?

时间:2018-01-07 15:22:27

标签: java multithreading threadpool executorservice threadpoolexecutor

我有一个的3个实例,它是实现runnable接口。我正在实例化我的Executor类,如下所示;

 executor = Executors.newScheduledThreadPool(2);<--- talking about this part
    executor.scheduleAtFixedRate(unassignedRunnable, 0, refreshTime, TimeUnit.SECONDS);
    executor.scheduleAtFixedRate(assignedToMeRunnable, 2, refreshTime, TimeUnit.SECONDS);
    executor.scheduleAtFixedRate(createTicketsFromFile, 3, refreshTime * 2, TimeUnit.SECONDS);

我的问题是,如果我将线程池数量从2更改为13,那会有什么不同吗?我几乎没有尝试过。任何人都可以解释线程池计数的实际使用吗?也许我的任务很轻松?

3 个答案:

答案 0 :(得分:2)

那就是corePoolSize是池中的数字线程。可用线程选择符合条件的任务并在同一个线程中运行。如果没有线程可用,虽然任务是eligble运行将不会执行,因为所有线程都忙。在你的情况下可能是您的任务非常短暂。要演示创建corepool size one并提交长时间运行的任务,然后提交一个轻量级任务检查行为,然后将corepoolsize增加到2并查看行为。

答案 1 :(得分:2)

您需要了解,无论您要创建多少个线程,最终都会在 可用内核数 上执行线程。现在,根据documentation “保留在池中的线​​程数,即使它们处于空闲状态。”

  

你能告诉我线程池数的实际用途是什么

executor = Executors.newScheduledThreadPool(2);

上面的代码行将在线程池中创建2个线程,但这并不意味着所有线程都会做一些工作。但是,同时,可以使用相同的线程从提交的线程池执行其他任务。

因此,在选择要创建的线程总数之前,最好先了解您的要求。 (我通常更喜欢这个数字,具体取决于可用内核数量)

答案 2 :(得分:1)

它取决于运行应用程序的计算机的CPU核心数。如果您拥有更多CPU核心,则多个线程可以并行运行,如果您的应用程序不是IO绑定应用程序,则可以提高整个系统的性能。

CPU绑定应用程序将受益于更多的内核和数量线程。

如果您有4个核心CPU,则可以将值配置为4.如果您的计算机具有单个CPU核心,则将池大小更改为4将没有任何好处。

相关的SE问题:

Java: How to scale threads according to cpu cores?

Is multithreading faster than single thread?