| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 441 人关注过本帖
标题:Daemon线程
只看楼主 加入收藏
yu1543054075
Rank: 1
等 级:新手上路
帖 子:102
专家分:8
注 册:2015-4-30
结帖率:90.24%
收藏
已结贴  问题点数:20 回复次数:3 
Daemon线程
public class ThreadA {
    public static void main(String[] args) {
        System.out.println("ThreadA执行:");
        
        Thread threadB = new Thread(new Runnable() {
            public void run() {
                try {
                    System.out.println("ThreadB开始:");
                    for (int i = 0; i < 5; i++ ) {
                        Thread.sleep(1000);
                        System.out.println("ThreadB执行..");
                    }
                    System.out.println("ThreadB即将结束..");
                }
                catch(InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        );
        threadB.start();
                threadB.setDaemon(true);//设置为Daemon线程
        System.out.println("ThreadA执行..");
    }
}
C:\Users\Administrator\Desktop\classes>java ThreadA
ThreadA执行:
ThreadB开始:
Exception in thread "main" java.lang.IllegalThreadStateException
        at java.lang.Thread.setDaemon(Thread.java:1275)
        at ThreadA.main(ThreadA.java:121)
ThreadB执行..
ThreadB执行..
ThreadB执行..
ThreadB执行..
ThreadB执行..
ThreadB即将结束..
为什么没有执行System.out.println("ThreadA执行..");这个语句,求指导
搜索更多相关主题的帖子: public 
2015-06-08 19:54
凌风zx
Rank: 8Rank: 8
来 自:万灵娱乐城
等 级:蝙蝠侠
威 望:7
帖 子:88
专家分:790
注 册:2015-4-11
收藏
得分:20 
threadB.setDaemon(true); 必须在 threadB.start();之前设置

线程启动后不能在设置为守护线程
 
运行到threadB.setDaemon(true);时已经报异常了 所以后面的System.out.println("ThreadA执行..");没执行

但threadB已经启动了所以threadB的run方法执行了

初出茅庐
2015-06-09 19:13
yu1543054075
Rank: 1
等 级:新手上路
帖 子:102
专家分:8
注 册:2015-4-30
收藏
得分:0 
非常感谢版主的解释,那么下面的是怎么回事?
public class ThreadA {
    public static void main(String[] args) {
        System.out.println("ThreadA执行:");
        
        Thread threadB = new Thread(new Runnable() {
            public void run() {
                try {
                    System.out.println("ThreadB开始:");
                    for (int i = 0; i < 5; i++ ) {
                        Thread.sleep(1000);
                        System.out.println("ThreadB执行..");
                    }
                    System.out.println("ThreadB即将结束..");
                }
                catch(InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        );
        threadB.setDaemon(true);//设置为Daemon线程
        threadB.start();
        System.out.println("ThreadA执行");
    }
}
//
//C:\Users\Administrator\Desktop\classes>java ThreadA
//ThreadA执行
//ThreadA执行
//ThreadB开始
为什么不是ThreadA执行
          ThreadB开始
          ThreadA执行
求指导!!
2015-06-10 17:42
凌风zx
Rank: 8Rank: 8
来 自:万灵娱乐城
等 级:蝙蝠侠
威 望:7
帖 子:88
专家分:790
注 册:2015-4-11
收藏
得分:0 
回复 3楼 yu1543054075
你既然学了线程就应该明白啊

多线程虽然是串行的  但是通过cpu时间分片可以达到一定的并行效果

所以线程之间的运行顺序是不确定的

第一句是必然先执行的 B线程启动后 两个线程同时运行 后两句的顺序应该是不确定的

初出茅庐
2015-06-10 19:54
快速回复:Daemon线程
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017037 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved