今天在面试中遇到一个线程同步的面试问题,在此记录,以供学习和参考。
问题描述
有三个线程T1、T2、T3,保证T2在T1后执行 T3在T2后执行。
问题分析
- 简单线程同步问题,考虑使用jion()方法。
- jion方法:当t2中调用t1.jion()是,会先执行完t1线程,当t1线程执行完成之后执行t2 。
解决
- 创建线程T1,T2,T3。
- 在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次