【问题标题】:How to limit a task from using all threads in a thread pool?如何限制任务使用线程池中的所有线程?
【发布时间】:2011-04-12 02:54:28
【问题描述】:

我正在使用线程池在我的应用程序后台执行任务。但是,我的一些任务比其他任务重。因此,我想将繁重的任务限制在线程池的某个子集中,从而至少保留几个线程以供任何轻量级任务执行。

有没有简单的方法来做到这一点?

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

    最简单的方法是为不同的“任务权重”使用单独的线程池。

    您甚至可以创建单独的类,为不同的任务公开单独的方法。

    【讨论】:

      【解决方案2】:

      如前所述,最干净的方法是为繁重的线程使用单独的线程池。

      另一种方法是使用信号量。创建一个计数为 3 的信号量。重线程必须先获取()它。只有三个重的能够做到这一点。其余的将等待(或失败,如果您使用 tryAcquire())。

      当然,线程需要“知道”它是一个“重”线程。对于第三方线程它不起作用,所以再次参见“两个池”方法。 :-)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-14
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 2020-03-27
        • 1970-01-01
        • 1970-01-01
        • 2019-10-24
        相关资源
        最近更新 更多