我想实现这样一个线程池控制:
核心线程数有10个,最大线程数20,任务队列无限。调度顺序为,当有10个以下任务进来时,由核心线程处理;当11个任务进来时,这时候新增一个线程,让11个线程运行;当有20个以上任务进来时,最大线程20个同时运行,剩下的任务进入任务队列。
也就是说线程调度的优先级是:核心线程>最大线程>任务队列看了一下JDK1.5提供的ThreadPoolExecutor,它的任务处理优先级是:核心线程>任务队列>最大线程。应该怎么处理才能达到我想要的效果呢?还请各位大虾多多赐教~~~~谢咯
核心线程数有10个,最大线程数20,任务队列无限。调度顺序为,当有10个以下任务进来时,由核心线程处理;当11个任务进来时,这时候新增一个线程,让11个线程运行;当有20个以上任务进来时,最大线程20个同时运行,剩下的任务进入任务队列。
也就是说线程调度的优先级是:核心线程>最大线程>任务队列看了一下JDK1.5提供的ThreadPoolExecutor,它的任务处理优先级是:核心线程>任务队列>最大线程。应该怎么处理才能达到我想要的效果呢?还请各位大虾多多赐教~~~~谢咯
http://pingfang.javaeye.com/blog/47605
JDK1.5的,中文的,就这个类,很详细的
http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/concurrent/ThreadPoolExecutor.html
这里的queue 使用LINKED的队列 这样的话 可以无边界的增长。
这样创建的线程池,任务处理的优先级是:核心线程>任务队列>最大线程。我希望是核心线程池满了后,能够优先起线程处理任务,达到最大线程后再放入任务队列。
如果任务在10个以下,那动态调整根本不需要;
如果任务在20个以上,就是ncro说的了。如果处理快,10个线程已经足够了;如果慢,20个也很快就撑满。
如果任务在10-20个,只有这种情况动态调整存在一定的意义。可以保证每个进来的任务都可以立即得到处理。根据这样分析,只有当这个线程池的普遍处理任务数都在10-20一个较稳定的范围时,动态调整存在一定的意义(但如果任务数都在这个范围稳定的话,可以直接new一个长度为20的固定线程池就搞定了);如果任务数波动较大的话,就多数取决于任务处理的快慢,线程池的动态调整就没什么意义了。动态调整估计比较适用于一些非常精密、高效的程序中,普通的程序应该是涉及不到的。如果大家还有更好的想法,希望也能一起讨论一下啊。
PS:这个帖子铁定是要再加分的!
http://pingfang.javaeye.com/blog/47605