为了账号安全,请及时绑定邮箱和手机立即绑定

关于守护线程

关于守护线程

慕粉3291149 2016-12-13 16:42:39
public class Daemon implements Runnable { Thread A,B; public Daemon() { A = new Thread(this); B = new Thread(this); } @Override public void run() { Thread t = Thread.currentThread(); if(t == A){ for (int i = 0; i < 8; i++) { System.out.println("i = " + i);// try {// Thread.sleep(1000);// } catch (InterruptedException e) {} } }else if(t == B){ while(true){ System.out.println("线程B是守护线程");// try {// Thread.sleep(1000);// } catch (InterruptedException e) {} } } }}为什么程序的运行结果是无数个 "线程B是守护线程",而另一个线程A并没有执行呢
查看完整描述

3 回答

已采纳
?
逆光之羽

TA贡献55条经验 获得超13个赞


//img1.sycdn.imooc.com//584fcfeb0001cbdf08920505.jpg

你的代码没有问题啊?思路应该也是对的 我拿你的代码执行出来A线程正常执行 B线程作为守护线程也是程序执行完后停止了

你确定你跑的时候A线程没执行?orz

查看完整回答
反对 回复 2016-12-13
  • 慕粉3291149
    慕粉3291149
    好吧 由于结果太多 那个滚动条一滚就好多结果 我没看清楚 还以为全都是那个结果
?
逆光之羽

TA贡献55条经验 获得超13个赞

执行的线程的部分的代码怎么写的?

应该是你while(true)造成死循环的原因吧?就算你执行代码打算把Daemon跑上多次,第一次进入

else if(t == B){

while(true){

}}

这个判断条件之后程序就卡死在里面了,一直输出"线程B是守护线程"也是正常的吧

老实说你这代码的思路没看懂orz 只能猜个大概


查看完整回答
反对 回复 2016-12-13
  • 慕粉3291149
    慕粉3291149
    public static void main(String[] args) { Daemon daemon = new Daemon(); daemon.A.start(); daemon.B.setDaemon(true); daemon.B.start(); }
  • 慕粉3291149
    慕粉3291149
    两个线程都执行了 为什么只是守护线程在运行,就算是while循环,线程之间也是轮流运行的啊,另一个线程总有机会运行吧
  • 3 回答
  • 0 关注
  • 1474 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信