- Java code
n...、、根据n判断执行的线程数LinkedBlockingQueue queue=new LinkedBlockingQueue<Runnable>();ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 35, 1, TimeUnit.SECONDS, queue);for(int i=0;i<n){ Main m=.. //要执行线程 executor.execute(m);}
现在我n为多条时,还是一条一条执行 ,并没有并发
------解决方案--------------------
你的corePoolSize为1,只有当queue满了的时候,线程数才会增加,but,你的queue是无界的,所以,你的线程数永远只会是1.。。。
具体规则看ThreadPoolExecutor的API,异常详细
------解决方案--------------------
当n<corePoolSize时,直接创建线程,即刚开始就并发。
当corePoolSize<n<maximmPoolSize时,需要都LinkedBlockingQueen中排队,满了才创建新线程,这就是为啥楼主的程序里一条一条输出的原因,因为你的排队器默认的是无界值(Integer.MAX_VALUE)。
当corePoolSize和maximumPoolSize大小相同时相当于创建了固定大小的线程池。因而程序是并发的。
不知道楼主明白否?