减少具有许多睡眠线程时使用的OS线程数

时间:2011-06-15 15:41:54

标签: java multithreading

我的系统有数百个线程。大多数线程在给定时间内正在睡觉或等待,但他们可以随时醒来。我想减少专用于我的系统的OS线程数。 你知道一个简单的方法吗?例如,是否存在线程池包,只要线程进入睡眠模式,它就会存储状态并终止线程。每当它醒来时,它就会以旧状态开始新线程。

由于

3 个答案:

答案 0 :(得分:10)

您是否在寻找ThreadPoolExecutor之类的内容?

  

执行每个的ExecutorService   使用可能的一个提交任务   通常是几个汇集的线程   使用Executors工厂配置   方法

     

线程池解决了两个不同的问题   问题:他们通常提供   执行时提高了性能   大量的异步任务,   由于减少了每个任务的调用   开销,他们提供了一种手段   限制和管理资源,   包括线程,消耗时间   执行一系列任务。每   ThreadPoolExecutor也维护一些   基本统计,如数字   已完成的任务。

答案 1 :(得分:1)

你描述的东西基本上就是什么线程。

现在,您可能知道您的应用程序逻辑仅依赖于一些变量,而不是线程堆栈上的所有变量。您只需要这几个变量即可从睡眠中恢复。 VM和OS无法知道,他们无法帮助您。

你必须自己做。当您的线程即将退出时,将基本状态包装起来并将其存储在队列中。然后退出线程,或将其返回到线程池。

当满足某个条件时,从队列中查找状态,根据它创建新任务,并在新线程上运行任务。

答案 2 :(得分:-1)

我的理解是,由于初始化新线程的开销,你最好让线程休眠。当线程处于休眠状态时,它不会被安排在CPU上,所以我想我并没有真正看到这个问题。