线程池怎么让主线程知道所有子线程已经执行完成?
如题,
一个线程池有5个线程,我想要主线程等待所有子线程执行完,主线程在继续执行,
请问怎么解决?

解决方案 »

  1.   

    主线程做个while true循环判断所有的子线程!isAlive()
      

  2.   

    不知道你的线程池的实现是自写还是使用JDK提供的java.util.concurrent.ThreadPoolExecutor。如果是JDK提供的线程池。可以去判断getPoolSize()是否等于或者小于池的核心线程数量corePoolSize。当然这种情况下也存在陷阱,一就是核心线程数量无法确定是否在空闲状态,只有将corePoolSize设置为0,才能正确判断。二就是线程池对空闲线程的销毁存在一个keepAliveTime,只有要将keepAliveTime减小到你getPoolSize的频率时,可能才能正确判断。并且如果使用ThreadPoolExecutor,对于池中的线程,你无法针对某一个线程进行操作。我的感觉,你现在的需求不符合使用线程池的需求,你需要的是一个线程管理类而不是池。
      

  3.   

    如果我正确理解你的问题的话,可以说你的问题和线程池无关
    Thread.join();
    参考
    http://www.java2s.com/Tutorial/Java/0160__Thread/Usingjointowaitforthreadstofinish.htm
      

  4.   

    java.util.concurrent.CyclicBarrier
    一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用。牢记一点:当要解决任何线程问题时,优先考虑api提供的工具。
      

  5.   

    java.util.concurrent.ThreadPoolExecutor
    有三个方法
    getActiveCount
    getCompletedTaskCount
    getTaskCount
    具体意思你看下就知道了。
    当activecount为0的时候就全部执行完毕了。可以做一个定时任务去检查就行了。