三:多线程之join

在线程中有一个方法为join,join内部实现为wait;其实就是等待该线程执行的意思;
当有两个线程执行时,B线程执行前调用了A线程的join方法后,那么B线程必须在A线程执行完毕才开始执行;

举个雷子:

 public static class ThreadA extends Thread {
        @Override
        public void run() {
            super.run();

            System.out.println("我是线程 A");
        }
    }

 public static class ThreadB extends Thread {
        Thread thread;

        public ThreadB(Thread thread) {
            this.thread = thread;
        }

        @Override
        public void run() {
            super.run();
            try {
                thread.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("我是线程 B");
        }
 }

 public static void main(String[] agrs) {

        ThreadA threadA = new ThreadA();
        ThreadB threadB = new ThreadB(threadA);

        threadA.start();
        threadB.start();

        System.out.println("我是主线程");
 }

线程B中调用了线程A的join方法,那么线程B是在线程A执行完毕后才会执行的,在B执行前主线程会直接执行,看结果:

我是主线程
我是线程 A
我是线程 B

同理,主线程执行前要在线程B执行后再执行的话,则在主线程前调用B线程的join方法即可:

    public static void main(String[] agrs) {

        ThreadA threadA = new ThreadA();
        ThreadB threadB = new ThreadB(threadA);

        threadB.start();
        threadA.start();
        
        try {
            threadB.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("我是主线程");
    }

输出结果为:

我是线程 A
我是线程 B
我是主线程
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 8,054评论 1 18
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 7,176评论 1 15
  • 林炳文Evankaka原创作品。转载自http://blog.csdn.net/evankaka 本文主要讲了ja...
    ccq_inori阅读 3,860评论 0 4
  • 此片文章主要总结的是Thread类及相关的基础概念和API,首先需要厘清线程调度中的几个基本概念: 一、线程调度的...
    千淘萬漉阅读 7,404评论 0 2
  • 写在前面的话: 这篇博客是我从这里“转载”的,为什么转载两个字加“”呢?因为这绝不是简单的复制粘贴,我花了五六个小...
    SmartSean阅读 10,215评论 12 45