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为多条时,还是一条一条执行 ,并没有并发

解决方案 »

  1.   

    你的corePoolSize为1,只有当queue满了的时候,线程数才会增加,but,你的queue是无界的,所以,你的线程数永远只会是1.
    具体规则看ThreadPoolExecutor的API,异常详细
      

  2.   

    LZ可以试试new LinkedBlockingQueue(num)其中num小于循环中的n这时候corePoolSize正在执行,queue满了,线程数就会增加,35为上界
      

  3.   

    那你说把corePoolSize直接设置为35 ,怎么样呢
      

  4.   

    当n<corePoolSize时,直接创建线程,即刚开始就并发。
    当corePoolSize<n<maximmPoolSize时,需要都LinkedBlockingQueen中排队,满了才创建新线程,这就是为啥楼主的程序里一条一条输出的原因,因为你的排队器默认的是无界值(Integer.MAX_VALUE)。
    当corePoolSize和maximumPoolSize大小相同时相当于创建了固定大小的线程池。因而程序是并发的。
    不知道楼主明白否?