共被编辑 1 次

版本 更新时间 贡献者 编辑原因 操作
#r1 2016年05月24日 枫依旧075 创建问题 查看

java线程的join方法源码分析的不解问题

1.首先通过源码可以看到join方法的底层逻辑还是使用当前线程对象的wait方法,也知道子线程执行完业务代码后,主线程才能解除阻塞。我认为既然使用的是wait方法,必然需要notify或notifyAll来唤醒,但唤醒的机制是什么?难道使用的线程的隐式钩子方式,当线程执行完后再进行notify?

2.伪代码,按自己的理解实现join方法,不知道这样对不对?
public class JoinTest {

public static void main(String[] args) throws InterruptedException {
    ThreadTest tt=new ThreadTest();
    tt.start();
    synchronized (tt) {
        tt.wait();
    }
    System.out.println("主线程继续。。。。");
}

}

class ThreadTest extends Thread {

public void run() {
    for(int i=0;i<5;i++){
        try {
            Thread.sleep(1000);
            System.out.println("i="+i);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

}
//---输出结果输下----
i=0
i=1
i=2
i=3
i=4
主线程继续。。。。