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执行完毕之后,其他线程才可以进入运行状态。

posted @   有锦  阅读(5)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示