Thread的方法join()使用
join()的作用:Waits for this thread to die.等待线程对象销毁。
在Thread源码中可以看到join源码是使用了wait()方法来实现等待功能。
因为join()内部使用了wait()方法实现,wait方法被调用后线程会释放锁,因此join方法也具有释放锁的特点。
这也是join()、wait()和sleep()的区别,sleep是不会释放锁的。
JDK1.8中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 ) { while (isAlive()) { wait( 0 ); } } else { while (isAlive()) { long delay = millis - now; if (delay <= 0 ) { break ; } wait(delay); now = System.currentTimeMillis() - base; } } } |
下面的测试代码能说明join能够使线程排队运行。
/** * @author monkjavaer * @date 2018/12/15 16:36 */ public class JoinThread implements Runnable{ @Override public void run() { System.out.println( "I am JoinThread run ..." ); try { TimeUnit.MILLISECONDS.sleep( 2000 ); } catch (InterruptedException e) { e.printStackTrace(); } } } |
join()测试:
public class JoinTest { public static void main(String[] args) { try { Thread thread = new Thread( new JoinThread()); thread.start(); thread.join(); System.out.println( "....after JoinThread....." ); } catch (InterruptedException e) { e.printStackTrace(); } } } |
输出:
I am JoinThread run ...
....after JoinThread.....
分类:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 电商平台中订单未支付过期如何实现自动关单?
· 用 .NET NativeAOT 构建完全 distroless 的静态链接应用
· 干货分享!MCP 实现原理,小白也能看懂
· 精选 4 款免费且实用的数据库管理工具,程序员必备!
· Cursor:一个让程序员“失业”的AI代码搭子
· MCP开发应用,使用python部署sse模式
· 慢查询解决思路