黑马程序员技术交流社区
标题:
守护线程问题
[打印本页]
作者:
て淡莣了陌生
时间:
2013-4-27 11:11
标题:
守护线程问题
本帖最后由 て淡莣了陌生 于 2013-4-28 08:35 编辑
class Daemon {
public static void main(String[] args) {
Thread t1 = new Thread(){
public void run() {
for (int i = 0; i < 2; i++) {
System.out.println("A");
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
Thread t2 = new Thread(new Runnable(){
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("B");
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
t1.start();
t2.start();
t2.setDaemon(true);
}
}
这段关于守护线程的代码执行后为什么不但会抛异常,而且打印完A后,B还会继续打印呢??求解释!
作者:
刘凯
时间:
2013-4-27 11:49
守护线程方法的调用 应该是在线程启动之前调用吧 也就是得
t1.start();
t2.setDaemon(true); //放在t2.start();之前
t2.start();
作者:
付鑫鑫
时间:
2013-4-27 15:46
//把守护线程放在线程开启之前,因为线程起动起来了就不可以设置为守护线程.
//异常是java.lang.IllegalThreadStateException,非法的线程状态.
public class Demo03 {
public static void main(String[] args) {
Thread t1 = new Thread(){
public void run() {
for (int i = 0; i < 2; i++) {
System.out.println("A");
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
Thread t2 = new Thread(new Runnable(){
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("B");
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
t2.setDaemon(true); //把守护线程放在线程开启之前,因为线程起动起来了就不可以设置为守护线程.
t1.start();
t2.start();
}
}
作者:
吴波
时间:
2013-4-27 16:38
如果要设置守护线程就必须在线程起动之前,这是个前提
所以
t1.start();
t2.start();
t2.setDaemon(true);
应该改为
t2.setDaemon(true);
t1.start();
t2.start();
或者
t1.start();
t2.setDaemon(true);
t2.start();
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2