如何限制任务使用线程池中的所有线程?

时间:2011-04-11 18:38:37

标签: java multithreading

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

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

当然,线程需要“知道”它是一个“重”的。对于第三方线程,它不起作用,因此请再次查看“两个池”方法。 : - )