Java++:如何判断一个线程池中的所有线程都执行完成?
最近去参加一个央行项目组的面试,被问到线程池的问题:如何判断一个线程池中的所有线程都已经执行完成?当时没有回答上来。回来之后,google出一堆方案:有用ConcurrentHashmap手动计数的。还有说,先执行线程池的shutdown()方法,此时不再会接受新的线程任务了,只会执行以前的任务,然后通过isTerminated()方法判断时候执行完所有线程。我感觉都不够理想。 经一个比较务实的朋友介绍说api原生支持,我赶紧尝试并记录下来。。顺便吐槽一下,现在的职场,尤其是技术圈的浮躁之风,做了没3年的程序就纷纷想转管理~技术上不求甚解,知其然不知其所以然,迷信于某个人的经验,公司的技术分享也只是迫于升职要求才去做的,分享的内容没干货。。静下心来,做学问,才是对一个程序员最有益处的。言归正传,上代码。
public class ThreadsIsDone { public static void main(String[] args) { //创建一个10个线程的线程池 ThreadPoolExecutor pool = new ThreadPoolExecutor(10, 10, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); for(int i=0;i<10;i++){ pool.submit(new Runnable() { public void run() { System.out.println("当前线程:"+Thread.currentThread().getName()+",打印随机数:"+ new Random().nextInt(1000)); } }); } System.out.println("pool.getTaskCount():"+pool.getTaskCount()); System.out.println("pool.getCompletedTaskCount():"+pool.getCompletedTaskCount()); boolean allThreadsIsDone = pool.getTaskCount()==pool.getCompletedTaskCount(); System.out.println(allThreadsIsDone); if(allThreadsIsDone){ System.out.println("全部执行完成"); } while (!allThreadsIsDone){ allThreadsIsDone = pool.getTaskCount()==pool.getCompletedTaskCount(); if(allThreadsIsDone){ System.out.println("全部执行完成"); } } } }
分类:
JAVA
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南