У меня есть реализация потоков 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 nano секунды, почему мой SOUT печатает заявление?
Принимая во внимание тот факт, что тайм-аут вызываемого потока больше, чем вызывающий поток, не должен ли он прерываться, прежде чем он сможет распечатать заявление?
вы устанавливаете нить в качестве демона, потому что ваш поток будет в фоновом режиме вместо переднего плана. – Shriram
@ Шрирам нет, это не какой комплектDaemon. Понятия переднего плана и фона даже не существуют. –
Планировщик потоков может планировать потоки так, как он хочет. И одна наносекунда - очень и очень небольшое количество времени. Сделайте поток спящим несколько миллинов, и вы должны начать видеть то, что ожидаете. –