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

发布于 2024-11-01 02:38:45 字数 117 浏览 0 评论 0原文

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

有没有一种简单的方法可以做到这一点?

I'm using a thread pool to execute tasks in the background of my application. However, some of my tasks are heavier than others. So I'd like to limit the heavy tasks to a certain subset of the thread pool, thereby leaving at least a few threads open for any lightweight tasks to execute.

Is there a simple way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

杯别 2024-11-08 02:38:45

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

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

The most simple way is to use separate thread pools for different "tasks weight".

Even you can create separate class which exposes separate methods for differents tasks.

不如归去 2024-11-08 02:38:45

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

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

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

As it was said, the cleanest way is to use a separate thread pool for heavy threads.

Another way is to use a Semaphore. Create a semaphore with a count of, for example, three. Heavy threads have to acquire() it first. Only three heavy ones would be able to do so. The rest will wait (or fail, if you use tryAcquire()).

Of course, the thread needs to "know" it is a "heavy" one. For third-party threads it doesn't work, so see "two pools" approach again. :-)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文