繁体   English   中英

为什么Java线程未超时

[英]why is java thread not timing out

我有一个Java线程实现,如下所示:

class MyThread extends Thread {
    private static Integer counter = 1;

    public MyThread(final String name) {
        super(name + "_" + counter);
        counter++;
    }

    @Override
    public void run() {
        try {
            sleep(0,2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(this.getName() + " true = " + true);
    }
}

而主类如下:

public class ThreadingTest {

    public static void main(String[] args) {
        MyThread thisThread = new MyThread("MyThread");
        thisThread.setDaemon(true);
        thisThread.start();
        try {
            Thread.sleep(0,1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

但是,即使线程正在休眠2纳秒,而调用线程仅休眠1纳秒,为什么我的SOUT打印该语句?

考虑到被调用线程的超时大于调用线程的超时时间,是否应该在打印语句之前终止调用线程?

当所有非守护程序线程完成时,标记为守护程序的线程将被杀死。 因此,您的线程只是被杀死。 Java中的Daemon线程是什么?

使用Thread.sleep()不能具有纳秒级的精度。 即使执行这些指令也将花费超过一纳秒的时间。 请尝试使用毫秒级代码,然后看看它是否有效!

方法Thread.sleep仅确定线程正在休眠的时间量(线程处于TIMED_WAITING状态的时间)。 在此时间之后,线程将从等待线程集中删除,但仍必须等待获取CPU时间。 而需要多长时间是非常不确定的参数。 您永远不应依赖时间来确定线程执行的确切顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM