[英]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.