java - 在终止状态线程上运行()

标签 java multithreading

我一直在试图找到为什么“execute”只被打印一次的原因。但在我实际阅读的书中找不到答案,Java Threads或谷歌搜索。

public void init(){
    t = new Thread(new Runnable() {

        @Override
        public void run() {
            System.out.println("executed");
        }
    });
    t.start();
    while(true){
        if(!t.isAlive())
            t.run();
    }
}

最佳答案

查看JDK源码,这里是Thread.run()的定义:

public void run() {
    if (target != null) {
        target.run();
    }
}

当您使用 Runnable 启动线程时,它会被设置为 target。但是当线程结束运行时,系统会对其调用 exit(),除其他外,它会执行以下操作:

target = null;

因此,您看到的“已执行” 是来自Thread 本身;当您在线程上调用 run() 时,target 已无效,run() 什么也不做。

关于java - 在终止状态线程上运行(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20548610/

相关文章:

java - 在请求中提供 pdf 会导致空响应

java - 如何使用java程序获取PID的内存、CPU使用率?

android - Ice Cream Sandwich 上的线程

c - 树莓派上的 SDL 1.2 出现奇怪的线程死锁

iphone - 警告 : UIKit should not be called from a secondary thread

c++ - 并行骑士之旅算法

java - cxf:cxf-codegen-plugin:2.1.2:wsdl2java 失败:索引 2 处不透明部分中的非法字符

java - 使用来自不同线程的 JMS session

java - 如何获取 Firebase TIMESTAMP 与当前时间之间的小时数?

java - 使用 Java 8 并行流更新从 Map 中自动检索的元素