黑马程序员技术交流社区
标题:
在学习线程的时候碰到的一个问题~
[打印本页]
作者:
这个名字也有宇
时间:
2016-4-12 18:51
标题:
在学习线程的时候碰到的一个问题~
public class ThreadDemo04_setDaemon {
public static void main(String[] args) {
setDaemonThread s1=new setDaemonThread();
setDaemonThread s2=new setDaemonThread();
s1.setName("张飞");
s2.setName("关羽");
s1.setDaemon(true);
s2.setDaemon(true);
//我把张飞,关羽定义为用户线程或者守护线程
//直接刘备活着的时候 他们两个才能或者
//也有一定的延迟
//就像坦克大战里面,基地是刘备,刘备死了一会,张飞,关羽也会死。
s1.start();
s2.start();
Thread.currentThread().setName("刘备");
//这里 是指当前线程 即这个main也是一个线程 。
for(int x=0;x<5;x++){
System.out.println(Thread.currentThread().getName()+x);
}
}
}
问题:
这里我用到了线程类的标记用户线程的方法。setDaemon,我把s1 s2标记为用户线程
。
这里 main方法 也是一个线程。
应该是抢占式的调用CPU,当main方法里面运行结束后
其他线程也会结束。结果应该是刘备,关羽,张飞交错出现。
但是我输出来结果却只有main方法里面的输出
刘备0
刘备1
刘备2
刘备3
刘备4
是为什么呢?
作者:
15614014298
时间:
2016-4-12 19:55
把你这个类setDaemonThread也贴出来看看,估计是这个类的run方法已经运行完了,所以在循环之前你的两个线程已经结束了
作者:
这个名字也有宇
时间:
2016-4-13 13:57
15614014298 发表于 2016-4-12 19:55
把你这个类setDaemonThread也贴出来看看,估计是这个类的run方法已经运行完了,所以在循环之前你的两个线程 ...
public class setDaemonThread extends Thread{
public void run() {
for(int x=0;x<100;x++){
System.out.println(getName()+x+new Date());
}
}
}
你好 setDaemonThread
作者:
15614014298
时间:
2016-4-13 21:16
setDaemon必须在线程开始的时候设置,所以你的setName应该写在setDaemon方法下面
作者:
491482538
时间:
2016-4-13 21:39
我也遇到了这个问题同问
作者:
星空下的初吻
时间:
2016-4-13 23:26
同问啊 !!!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2