A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈从宾 中级黑马   /  2012-3-21 21:50  /  1836 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


class Demo extends Thread{

        @Override
        public void run() {
                super.run();
                for (int i = 0; i < 400; i++) {
                        System.out.println("hi,陈从宾,我是Demo线程"+i);
                }
        }
       
}
public class ThreadDemo {
        public static void main(String[] args) {
                Demo demo = new Demo();
                demo.start();
                for (int i = 0; i < 400; i++) {
                        System.out.println("hi,我是main线程"+i);
                }
                //demo.start();
        }
}

若把demo.start();语句放在main方法for循环之后运行结果没有线程并发的现象,而是先进行main线程然后进行自定义线程,这是为什么?

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

4 个回复

倒序浏览
按照语句从上到下执行的先后顺序,主函数里面的循环执行完了,才会开启线程,所以肯定不会有并发的现象。demo.start();放在主函数for循环之前是先开启线程,所以线程运行的同时主函数也继续自己的for循环,所以会有并发现象

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
这是必须的啊,main方法中的语句是从上向下执行的,主线程就先把main方法中的for循环执行完
执行到demo.start()时再执行run方法中的for循环,就是单线程执行过程啊。
你想看到线程并发执行就把demo.start()放在for循环之前。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
朱辉 发表于 2012-3-21 21:55
按照语句从上到下执行的先后顺序,主函数里面的循环执行完了,才会开启线程,所以肯定不会有并发的现象。de ...

也就是说自定义线程是在主线程中创建的对吗?

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
自定义线程需要被主线程开启,而主线程运行顺序是自上而下的,必须将demo.start();之前的语句执行完才可以执行该语句,而开启线程后,主线程也指行完毕,结束生命,此时只剩下一个线程,就是你定义的线程

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马