黑马程序员技术交流社区

标题: 多线程问题 [打印本页]

作者: 陈从宾    时间: 2012-3-21 21:50
标题: 多线程问题

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线程然后进行自定义线程,这是为什么?
作者: 朱辉    时间: 2012-3-21 21:55
按照语句从上到下执行的先后顺序,主函数里面的循环执行完了,才会开启线程,所以肯定不会有并发的现象。demo.start();放在主函数for循环之前是先开启线程,所以线程运行的同时主函数也继续自己的for循环,所以会有并发现象
作者: 刘元明    时间: 2012-3-21 21:57
这是必须的啊,main方法中的语句是从上向下执行的,主线程就先把main方法中的for循环执行完
执行到demo.start()时再执行run方法中的for循环,就是单线程执行过程啊。
你想看到线程并发执行就把demo.start()放在for循环之前。
作者: 陈从宾    时间: 2012-3-21 22:17
朱辉 发表于 2012-3-21 21:55
按照语句从上到下执行的先后顺序,主函数里面的循环执行完了,才会开启线程,所以肯定不会有并发的现象。de ...

也就是说自定义线程是在主线程中创建的对吗?
作者: 周建    时间: 2012-3-21 22:36
自定义线程需要被主线程开启,而主线程运行顺序是自上而下的,必须将demo.start();之前的语句执行完才可以执行该语句,而开启线程后,主线程也指行完毕,结束生命,此时只剩下一个线程,就是你定义的线程





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2