java - 如果我加入已终止(死亡)的线程怎么办

标签 java multithreading java-threads

在这里,我尝试在线程终止后加入该线程,代码工作正常,但我的问题是它不应该抛出一些错误消息或任何信息吗?

public class MultiThreadJoinTest implements Runnable {

    public static void main(String[] args) throws InterruptedException {
        Thread a = new Thread(new MultiThreadJoinTest());
        a.start();
        Thread.sleep(5000);
        System.out.println("Begin");   
        System.out.println("End");
        a.join();
    }

    public void run() {
        System.out.println("Run");
    }
}

最佳答案

如果你查看Thread::join的源代码,你会发现它调用了Thread::join(timeout)方法。查看该方法的源代码,我们可以看到它通过调用 Thread::isAlive 循环检查线程的状态:

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

        this.wait(delay);
        now = System.currentTimeMillis() - base;
    }
}
...

因此,如果您调用 join 的线程被终止 - join 将返回并且不执行任何操作。

关于java - 如果我加入已终止(死亡)的线程怎么办,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57544672/

相关文章:

android - 服务、异步任务和线程之间的区别?

java - 将 Eclipse 项目导入 Netbeans 时出错

Java 在初始化时将 var 添加到对象

java - "References to generic type JsonResponse should be parameterized"

java - 具有特定线程数的并行 for 循环

java - notifyAll() 不通知所有线程

java - 如何为扑克评估器打乱两个数组

iphone - 在后台播放音频文件(多任务)

java - 限制 JVM 使用的线程数

java - 我们可以同时从多个线程访问同一个实例的同步方法和非同步方法吗?