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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值