控制方法执行时间
可以通过join的特性控制方法的执行时间
join :当我们调用某个线程的这个方法时,这个方法会挂起调用线程,直到被调用线程结束执行,调用线程才会继续执行。
Thread thread = new Thread(() -> { try { Thread.sleep(3000L); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()); },"子线程"); thread.start(); //thread插入当前线程(调用join的线程),当前线程挂起,thread运行完毕后当前线程继续 try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("运行完毕");
注意是调用thread.join();的线程挂起(不是thread挂起),等着thread调用完毕后当前线程才继续,看一下源码
//在Thread类中定义,说明调用的是thread对象的join方法 //假设main线程调用了thread线程的join方法 public final synchronized void join(long millis) throws InterruptedException { long base = System.currentTimeMillis(); long now = 0; if (millis < 0) { throw new IllegalArgumentException("timeout value is negative"); } if (millis == 0) { //main线程第一次进来,thread线程还在运行 while (isAlive()) { //这里要注意,wait后释放了thread对象的锁 //⭐⭐虽然调用的thread的wait方法(本质是Object的)但是终归是由main线程调用的wait方法,挂起的是main线程,并不是thread //当thread运行完毕后,并不存在notify,jvm底层自然会调度唤醒main线程 wait(0); } } else { //控制时间的先不看 ………… } }
通过join的特性控制方法的执行时间
/** * 控制方法运行时间 * @param thread * @param cTime * @throws Exception */ public void monitor(Thread thread,long cTime) throws Exception { long begin = System.currentTimeMillis(); if(thread.getState() != Thread.State.NEW){ throw new Exception("Thread State Error"); } thread.start(); thread.join(cTime); if(thread.getState() != Thread.State.TERMINATED){ thread.stop(); } System.out.println("运行时间监控:"+(System.currentTimeMillis()-begin)); }
测试以及代码获取详见:
https://gitee.com/zxporz/zxp-thread-test/blob/master/src/main/java/org/zxp/thread/communication/join/ControlTime.java
标签:
高并发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架