У меня есть Java-программа:
public class foo{
public static void main(String[] args) throws Exception{
Thread t = new Thread(
new Runnable() {
public void run() {
try{System.in.read();}catch(Exception e){}
}
}
);
t.setDaemon(true);
t.start();
Thread.sleep(10); // Make sure it hits the read() call
t.interrupt();
t.stop();
System.exit(0);
}
}
Выполнение этого (time java foo
) с присутствующим вызовом System.in.read
занимает ~ 480 мс, чтобы выйти, когда он запускается с System.in.read
вызовом System.in.read
, занимает ~ 120 мс для выхода
Я думал, что как только основной поток достигнет конца, программа закончится, но, очевидно, там будет еще около Thread.sleep
отставание (вы можете увидеть это, добавив println после Thread.sleep
). Я попробовал t.interrupt
t.stop
System.exit
который должен немедленно прекратить "все", но ни один из них не может заставить программу пропустить 350m задержка дополнительного выхода, похоже, ничего не делая.
Кто-нибудь знает, почему это так, и если что-нибудь, что я могу сделать, чтобы избежать этой задержки?