java问题
悬赏分:0 - 离问题结束还有 14 天 22 小时
public class ThreadPrint{static Thread makeThread(final String id,boolean doemon)
{Thread t=new Thread(id){public void run(){
System.out.println(id);
}
};
t.setDaemon(daemon);
t.start();
return t;}
public static void main(String args[])Thread a=makeThread("A",false);
Thread b=makeThread("B",true);
System.out.println("END,\n");}
选择正确的答案:
a.总是打印字符A
b.总打印字符B
c.从不在END之后打印A
d.从不在END之后打印B
e.程序可能依次打印B END和A,
请问这题为什么是选择a ,e呢,我有点不怎么理解麻烦大家解释下
悬赏分:0 - 离问题结束还有 14 天 22 小时
public class ThreadPrint{static Thread makeThread(final String id,boolean doemon)
{Thread t=new Thread(id){public void run(){
System.out.println(id);
}
};
t.setDaemon(daemon);
t.start();
return t;}
public static void main(String args[])Thread a=makeThread("A",false);
Thread b=makeThread("B",true);
System.out.println("END,\n");}
选择正确的答案:
a.总是打印字符A
b.总打印字符B
c.从不在END之后打印A
d.从不在END之后打印B
e.程序可能依次打印B END和A,
请问这题为什么是选择a ,e呢,我有点不怎么理解麻烦大家解释下
打印A的线程是非daemon的,所以,A是肯定会被打印出来的,a是对的。
B不一定有机会被打印,那要看它是否在主线程和打印A的线程退出之前能获得调度运行的机会。所以b不对。
c和d也不一定,实际的线程调度次序和运行情况是很难预测的,一切皆有可能。
e当然是对的,因为它说“可能”,当调度器依次调度打印B的线程、主线程和打印A的线程上台运行时,自然就是这种结果。