join小结

Thread类的join方法

join()方法,因为join()方法底层是就是通过wait()方法实现的。
让"主线程"等待(WAITING状态),一直等到其他线程不再活动为止,然后"主线程"再执行。

join在英语中是“加入”的意思,join()方法要做的事就是,当有新的线程加入时,主线程会进入等待状态,一直到调用join()方法的线程执行结束为止。

1 案例一:
class A implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            System.out.print("A"+(i+1)+"\t");
        }
    }
}
class B implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            System.out.print("B"+(i+1)+"\t");
        }
    }
}
public class Demo03 {
    public static void main(String[] args) throws InterruptedException {
        Thread threadA = new Thread(new A());
        Thread threadB = new Thread(new B());
        threadA.start();
        threadA.join();
        threadB.start();
        threadB.join();
        for (int i = 0; i < 50; i++) {
            System.out.print("m"+(i+1)+"\t");
        }
    }
}

join加入前的运行结果
在这里插入图片描述

join加入后的运行结果
在这里插入图片描述

对于上述案例一,主要为了对比凸显join的作用,加上join后,在对应的线程对象start后,只有该线程对象在运行,其他的都被等待了,但该方法主要针对的是“主”线程,这个“主”线程并不特指main函数。

2 案例二:
class F implements Runnable{
    @Override
    public void run() {
        Thread thread = new Thread(new S());
        thread.start();
        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        for (int i = 0; i < 50; i++) {
            System.out.print("F"+(i+1)+"\t");
        }
    }
}
class S implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            System.out.print("S"+(i+1)+"\t");
        }
    }
}
public class Demo04 {
    public static void main(String[] args) {
        new Thread(new F()).start();
    }
}

案例二就是一个很好的说明,F类里添加了S类的线程对象,调用join方法后,S线程执行完毕才轮到F线程。

在这里插入图片描述这是注释掉join后的运行结果
在这里插入图片描述
这是没有注释join的运行结果

关于更详细的解释可以去观看这篇博客
详解Java线程中的join()方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值