作为面试宠儿的多线程,在面试的时候是一定会被询问的话题,今天,在和朋友聊天的时候,他问了我一道很好玩的多线程面试题,不难,但是想解释清楚,还真的是不容易
问题:现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行
当看到这个问题的时候,我的第一反应就是wait、notify(会在后面附上代码+解释),然后脑子里闪过好多不同的方案,那我们就来看一下我的第一反应是如何处理的
分析:
Thread类中的join方法是用来同步的,底层其实是调用了 wait方法。先来看一下演示代码:
package com.whh.concurrency;
/**
*@description:
* 问题:现在有 T1、T2、T3 三个线程,怎样保证 T2 在 T1 执行完后执行T3在T2执行完
* 分析:使用join方法实现
*@author:wenhuohuo
*/
public class MyJoin {
public static void main(String[] args) {
final Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("线程1");
}
},"t1");
final Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
try {
t1.join();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("线程2");
}
},"t2");
final Thread t3 = new Thread(new Runnable() {
@Override
public void run() {
try {
t2.join();
}catch (Exception e){
e.printStackTrace();
}
System.out.println("线程3");
}
},"t3");
t3.start();
t2.start();
t1.start();
}
}<