- 1、join有什么用呢?
当一个线程正在进行中的时候,如果我们想调用另外一个线程的话,这时我们可以使用join。 - 2、join方法的底层原理,简单来说就是,join方法能把所调用join方法的线程进入休眠状态(wait()),等执行完joinThread线程之后,会自动调用notifyAll方法叫醒所有处于wait状态的线程。
看过AQS的朋友,应该很容易理解join方法。但是有一点是,能用join方法实现的功能,都有其他的实现方式,目前找不到join方法和其他方法对比起来有什么优点之处,既然存在了,那就是有道理。
public class Demo {
public void a(Thread joinThread) {
System.out.println("方法a执行了。。。");
joinThread.start();
try {
joinThread.join();//线程加塞
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("a方法执完毕。。。");
}
public void b() {
System.out.println("加塞线程执行了。。。");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("加塞线程执行完毕。。。");
}
public static void main(String[] args) {
Demo demo = new Demo();
Thread joinThread = new Thread(new Runnable() {
@Override
public void run() {
demo.b();
}
});
new Thread(new Runnable() {
@Override
public void run() {
demo.a(joinThread);
}
}).start();
}
}