【发布时间】:2011-04-12 02:54:28
【问题描述】:
我正在使用线程池在我的应用程序后台执行任务。但是,我的一些任务比其他任务重。因此,我想将繁重的任务限制在线程池的某个子集中,从而至少保留几个线程以供任何轻量级任务执行。
有没有简单的方法来做到这一点?
【问题讨论】:
标签: java multithreading
我正在使用线程池在我的应用程序后台执行任务。但是,我的一些任务比其他任务重。因此,我想将繁重的任务限制在线程池的某个子集中,从而至少保留几个线程以供任何轻量级任务执行。
有没有简单的方法来做到这一点?
【问题讨论】:
标签: java multithreading
最简单的方法是为不同的“任务权重”使用单独的线程池。
您甚至可以创建单独的类,为不同的任务公开单独的方法。
【讨论】:
如前所述,最干净的方法是为繁重的线程使用单独的线程池。
另一种方法是使用信号量。创建一个计数为 3 的信号量。重线程必须先获取()它。只有三个重的能够做到这一点。其余的将等待(或失败,如果您使用 tryAcquire())。
当然,线程需要“知道”它是一个“重”线程。对于第三方线程它不起作用,所以再次参见“两个池”方法。 :-)
【讨论】: