解决方案 »

  1.   

    不懂你说的什么意思,线程池的目的是控制最大并发量的。你这里Children和Children2会立即开始执行,而Children3会等前面两个有一个执行完了之后再执行,执行前只是放入了一个等待队列里。
      

  2.   

    new ThreadPoolExecutor(2, 100, 1000,TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>(20),new ThreadPoolExecutor.CallerRunsPolicy());
    你应该没理解这里面的参数意思。
    首先当你核心线程池满了,如果还有线程需要执行那这个时候就会丢到LinkedBlockingDeque等待执行,如果LinkedBlockingDeque又满了,这个时候就会开最大线程池了,当然如果最大线程池也满了就会用到new ThreadPoolExecutor.CallerRunsPolicy()这个东西了。
      

  3.   

    楼主的意思应该是和提交到线程池的任务写法有关,本例是一个while(true),但很多情况下提交到里边的任务不是一个循环,只是一个业务流程,那么线程池的数量参数就很有意义了(实现过程就和楼上两位说的一样)