日期:2014-05-20  浏览次数:20736 次

JAVA中执行器的问题
Java code

public class FixedThreadPool {
    public static void main(String[] args) {
        ExecutorService exec=Executors.newFixedThreadPool(5);//--1
        for (int i = 0; i < 5; i++)//--2
            exec.execute(new Test1());
        exec.shutdown();
    }
}


看了API知道FixedThreadPool是一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。
我设置了5个线程数,但是如果我把2处的5改为6或者更大的数字,请问,线程池里面有多少线程?如果5个的话,那么在循环里面多生成的是原本的重用,还是新生的。希望各位大大讲细点。。。
祝大家新年快乐。。。

------解决方案--------------------
newFixedThreadPool与cacheThreadPool差不多,也是能reuse就用,但不能随时建新的线程
-其独特之处:任意时间点,最多只能有固定数目的活动线程存在,此时如果有新的线程要建立,只能放在另外的队列中等待,直到当前的线程中某个线程终止直接被移出池子
-和cacheThreadPool不同,FixedThreadPool没有IDLE机制(可能也有,但既然文档没提,肯定非常长,类似依赖上层的TCP或UDP IDLE机制之类的),所以FixedThreadPool多数针对一些很稳定很固定的正规并发线程,多用于服务器

http://blog.sina.com.cn/s/blog_6151984a0100krj8.html
------解决方案--------------------
一般来讲,如果你该了2处的设定,新加入的任务会排队等候,不会触发新的线程,详见:
http://dongxuan.iteye.com/blog/901689