Question02 线程同步 保证T2在T1后执行 T3在T2后执行

时间:2021-01-07 15:16:10

今天在面试中遇到一个线程同步的面试问题,在此记录,以供学习和参考。

问题描述

有三个线程T1、T2、T3,保证T2在T1后执行 T3在T2后执行。

问题分析

  1. 简单线程同步问题,考虑使用jion()方法。
  2. jion方法:当t2中调用t1.jion()是,会先执行完t1线程,当t1线程执行完成之后执行t2 。

解决

  1. 创建线程T1,T2,T3。
  2. 在T2中加入T1.jion(),在T3中加入T2.jion()。
Thread t1 = new Thread(new Runnable() {
            public void run() {
                for (int i=1; i<=5; i++) {
                    System.out.println("线程t1执行"+i+"次");
                }
            }
        }) ;        
        Thread t2 = new Thread(new Runnable() {
            public void run() {
                try {
                    t1.join();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                for (int i=1; i<=5; i++) {
                    System.out.println("线程t2执行"+i+"次");
                }
            }
        }) ;
        Thread t3 = new Thread(new Runnable() {
            public void run() {
                try {
                    t2.join();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                for (int i=1; i<=5; i++) {
                    System.out.println("线程t3执行"+i+"次");
                }
            }
        }) ;
        t1.start();
        t2.start();
        t3.start();     

执行结果

线程t1执行1次
线程t1执行2次
线程t1执行3次
线程t1执行4次
线程t1执行5次
线程t2执行1次
线程t2执行2次
线程t2执行3次
线程t2执行4次
线程t2执行5次
线程t3执行1次
线程t3执行2次
线程t3执行3次
线程t3执行4次
线程t3执行5次