日期:2014-05-19  浏览次数:20692 次

线程并发执行问题!没有并发执行
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大小相同时相当于创建了固定大小的线程池。因而程序是并发的。
不知道楼主明白否?