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

时间:2013-12-12 16:18:24

标签: java multithreading

我一直试图找到“执行”只打印一次的原因。但在我正在阅读的书中找不到答案,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();
    }
}

1 个答案:

答案 0 :(得分:4)

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

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

当您使用Runnable发起线程时,它会设置为target。但是当线程完成运行时,系统会在其上调用exit(),其中包括:{/ p>

target = null;

所以你看到的那个"executed"来自Thread本身;当您在主题上致电run()时,target已取消,run()什么都不做。