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

Dan*_*elB 9 java multithreading

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

谢谢

hel*_*hod 10

你在找ThreadPoolExecutor之类的东西吗?

ExecutorService,使用可能的多个池化线程之一执行每个提交的任务,通常使用Executors工厂方法配置.

线程池解决了两个不同的问题:由于减少了每个任务的调用开销,它们通常在执行大量异步任务时提供更高的性能,并且它们提供了一种绑定和管理资源(包括线程)的方法,这些资源在执行集合时消耗任务.每个ThreadPoolExecutor还维护一些基本统计信息,例如已完成任务的数量.

  • 但是从OP中不清楚线程是否包含一些信息,以至于它们必须在调用之间保持活动状态.在这种情况下,我不认为线程池是合适的.(虽然重新设计可能允许使用线程池.) (2认同)

jpm*_*jpm -1

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