如何判断线程池里的线程全部执行完毕
1个回答
展开全部
------解决方案--------------------------------------------------------
主线程做个while true循环判断所有的子线程!isAlive()
------解决方案--------------------------------------------------------
不知道你的线程池的实现是自写还是使用JDK提供的java.util.concurrent.ThreadPoolExecutor。
如果是JDK提供的线程池。可以去判断getPoolSize()是否等于或者小于池的核心线程数量corePoolSize。当然这种情况下也存在陷阱,一就是核心线程数量无法确定是否在空闲状态,只有将corePoolSize设置为0,才能正确判断。二就是线程池对空闲线程的销毁存在一个keepAliveTime,只有要将keepAliveTime减小到你getPoolSize的频率时,可能才胡清能正确判断。并且如果使用ThreadPoolExecutor,对于池中的线程,你无法针对某一个线程进行操作。
我的感觉,你现在的需求不符合使用线程池的需求,你需要的是一个线程管理类而不是池。
------解决方案--------------------------------------------------------
java.util.concurrent.CyclicBarrier
一个同步辅助类,它允许一组线程互相等待铅州,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用。
牢记一点:当要解决任何线程问题时,优先考虑api提供的工具。
------解决方案--------------------------------------------------------顶四裤激前楼。
不清楚主线程是不是可以挂起,如果可以,可以在子线程可行的位置将主线程挂起,当子线程逻辑结束后,再将主线程唤醒。
仅做猜测,不可定论。
这好办啊
主线程做个while true循环判断所有的子线程!isAlive()
------解决方案--------------------------------------------------------
不知道你的线程池的实现是自写还是使用JDK提供的java.util.concurrent.ThreadPoolExecutor。
如果是JDK提供的线程池。可以去判断getPoolSize()是否等于或者小于池的核心线程数量corePoolSize。当然这种情况下也存在陷阱,一就是核心线程数量无法确定是否在空闲状态,只有将corePoolSize设置为0,才能正确判断。二就是线程池对空闲线程的销毁存在一个keepAliveTime,只有要将keepAliveTime减小到你getPoolSize的频率时,可能才胡清能正确判断。并且如果使用ThreadPoolExecutor,对于池中的线程,你无法针对某一个线程进行操作。
我的感觉,你现在的需求不符合使用线程池的需求,你需要的是一个线程管理类而不是池。
------解决方案--------------------------------------------------------
java.util.concurrent.CyclicBarrier
一个同步辅助类,它允许一组线程互相等待铅州,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用。
牢记一点:当要解决任何线程问题时,优先考虑api提供的工具。
------解决方案--------------------------------------------------------顶四裤激前楼。
不清楚主线程是不是可以挂起,如果可以,可以在子线程可行的位置将主线程挂起,当子线程逻辑结束后,再将主线程唤醒。
仅做猜测,不可定论。
这好办啊
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询