join()--等待线程执行终止
上一节:wait()–阻塞线程
join()等待线程执行终止
所属类: Thread
作用:保证当前线程执行完毕再执行下一个线程,类似同步
场景:在一个任务结束之后才可以进行下一个任务,例如,文件需要先保存成功才让其他线程操作,不能在文件保存过程中就让其他线程去进行操作
个人理解:类似于同步,,将线程按调用join()的顺序执行;
示例代码:
public class WaitTest {
private Object object = new Object();
public void threads() throws InterruptedException {
Thread thread1 = new Thread(() -> {
synchronized (object){
try {
System.out.println("线程1 获取对象锁");
System.out.println("线程1 阻塞,释放锁");
object.wait();
System.out.println("线程1 被唤醒,执行完毕");
} catch (Exception e) {
e.printStackTrace();
}
}
});
Thread thread2 = new Thread(() -> {
synchronized(object){
try {
System.out.println("线程2 获取对象锁");
System.out.println("线程2 阻塞,释放锁");
object.wait();
System.out.println("线程2 被唤醒,执行完毕");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread1.start();
//thread1.join();
thread2.start();
}
创建两个线程,线程1、2 线程1在执行的过程中调用object的wait()方法阻塞自己并释放对象锁,先来看不使用join()的执行结果:
因为wait()方法阻塞线程的时候会将对象锁释放,所以两个线程都可以执行到object.wait()处;
现在取消thread1.join();的注释,再执行:
线程1执行到object.wait()后释放了对象的锁,但是线程2并没有执行,,说明线程1在调用join()方法后尽管释放了对象锁,但是其他的线程还是不能执行,,必须要等到线程1执行完毕之后,其他线程才可以进入运行状态。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南