有点看不懂线程的join方法实现

本贴最后更新于 1441 天前,其中的信息可能已经物是人非

源码:

public final synchronized void join(long millis) throws InterruptedException {
    long base = System.currentTimeMillis();
    long now = 0;

    if (millis < 0) {
        throw new IllegalArgumentException("timeout value is negative");
    }

    if (millis == 0) {
        while (isAlive()) {
            wait(0);
        }
    } else {
        while (isAlive()) {
            long delay = millis - now;
            if (delay <= 0) {
                break;
            }
            wait(delay);
            now = System.currentTimeMillis() - base;
        }
    }
}

在 Main 方法里,当 Thread 实例 t 启动后,调用 t.join, 那 jion 里的 isAlive() 判断是 t 的状态吧?
join 里面的 wait()呢?是 t wait 还是 main thread wait 了?

如果是 t wait 了,有点想不明白为什么 t.join 了,main 线程会等待 t 线程完成才继续~~~

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2633 引用 • 8034 回帖 • 772 关注
  • Thread
    3 引用 • 24 回帖
  • join
    6 引用 • 21 回帖
  • 多线程
    12 引用 • 27 回帖
3 回帖
请输入回帖内容...