我有一個Java線程執行如下命令:爲什麼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打印語句?
考慮到被調用線程的超時大於調用線程的事實,調用線程在打印語句前是否應該終止?
您將線程設置爲守護進程將導致您的線程處於後臺而不是前臺。 – Shriram
@Shriram不,這不是什麼setDaemon。前景和背景的概念甚至不存在。 –
線程調度程序可自由調度線程的方式。而一納秒是非常非常少的時間。讓線程睡幾毫米,你應該開始看到你的期望。 –