黑马程序员技术交流社区

标题: 请大家分析一下一共会生成几条线程参与打印X [打印本页]

作者: 焦健    时间: 2013-1-12 22:07
标题: 请大家分析一下一共会生成几条线程参与打印X
本帖最后由 焦健 于 2013-1-13 13:52 编辑

到底会有几条线程打印X呢,请大家帮忙分析一下。我实在是搞不明白这是为什么了。。。
public class DuoXianCheng {
        public static void main(String[] args) {
                Run2 r2=new Run2();
                Thread t=new Thread(r2);
                t.start();
                r2.start();        
        }
}
class Run1 extends Thread implements Runnable{
        public void run(){
                for(int x=0;x<1000;x++)
                        System.out.println(Thread.currentThread().getName()+"---"+x);
        }
}
class Run2 extends Thread implements Runnable{
        public void run(){
                Run1 r1=new Run1();
                r1.start();
                for(int x=0;x<1000;x++)
                        System.out.println(Thread.currentThread().getName()+"---"+x);
        }
}
作者: 王少雷    时间: 2013-1-12 22:45
本帖最后由 王少雷 于 2013-1-12 22:53 编辑

和你一起分析一下啊
程序入口:
Run2 r2=new Run2();
这是普通一个主线程,创建了一个r2对象
Thread t=new Thread(r2);
创建一个以r2为资源对象的一个线程
t.start();
以r2为资源的一个线程开启,进去执行Run方法后,又new 了Run1,而Run1也是一个线程。
此时这里已经是两个线程。
r2.start();
程序执行到这里时,不加加主线程已经是4个线程。
所以准确说 是5个线程。
作者: 张云杰    时间: 2013-1-12 22:59
当r2 new的时候, 创建线程, t.start() , 往下执行, 调用r2方法, 因为你创建的是r2的线程 , 调用r2方法,  进入r1.star() 1条, 然后进入for循环 合起来2条, 接着 r2调用自己的方法, r1.star()再次调用,for 循环, 所以总共是4条线程在打印..
作者: 惠晖    时间: 2013-1-12 23:04
一共5个线程 主函数是一个线程,   t.start()是调用Runnable接口的线程,  接口中又有个R1线程 此时是   3个了。 然后又来个t2.start()调用thread线程 thread线程run方法中又会创建个R1线程  所以是5个了    一共加起来 包括主函数  是5个
作者: 焦健    时间: 2013-1-13 12:39
王少雷 发表于 2013-1-12 22:45
和你一起分析一下啊
程序入口:
Run2 r2=new Run2();

谢谢啊,哥们,我明白了。。
作者: 焦健    时间: 2013-1-13 12:40
张云杰 发表于 2013-1-12 22:59
当r2 new的时候, 创建线程, t.start() , 往下执行, 调用r2方法, 因为你创建的是r2的线程 , 调用r2方法,   ...

嗯,谢谢了
作者: 焦健    时间: 2013-1-13 12:40
惠晖 发表于 2013-1-12 23:04
一共5个线程 主函数是一个线程,   t.start()是调用Runnable接口的线程,  接口中又有个R1线程 此时是   3 ...

嗯,是这样的,谢谢了。。
作者: 张云杰    时间: 2013-1-13 17:05
惠晖 发表于 2013-1-12 23:04
一共5个线程 主函数是一个线程,   t.start()是调用Runnable接口的线程,  接口中又有个R1线程 此时是   3 ...

错, r1线程已经算在内了, 加上调用只有2个..
作者: 惠晖    时间: 2013-1-13 17:41
张云杰 发表于 2013-1-13 17:05
错, r1线程已经算在内了, 加上调用只有2个..

你还是自己好好实验实验吧。。。
作者: 焦健    时间: 2013-1-13 17:42
张云杰 发表于 2013-1-13 17:05
错, r1线程已经算在内了, 加上调用只有2个..

哥们,没有错,在主方法中通过Run2 的对象开启了两条线程,在Run2的run方法中调用了Run1的run,因为是两条线程执行Run2的run方法,所以Run1中的run方法被两条线程各调用一次,一共两次,所以又开启两条线程。。就是说,有两条线程执行Run2,有两条线程执行Run1,还有一条主线程,5条刚刚好。。参与打印的有4条线程。。。
作者: 张云杰    时间: 2013-1-13 18:07
本帖最后由 张云杰 于 2013-1-13 18:29 编辑
惠晖 发表于 2013-1-13 17:41
你还是自己好好实验实验吧。。。


如果再加上主线程, 5条.. 题目是问打印几条?
作者: 张云杰    时间: 2013-1-13 18:08
本帖最后由 张云杰 于 2013-1-13 18:28 编辑

题目是问参与几条打印, 我没错吧?  4条打印

作者: xueying123    时间: 2013-1-15 21:07
我是冯日,好文共赏,我只是路过!!











冲锋衣品牌  防辐射服哪个牌子好 电热水龙头价格 电子血压计什么牌子好






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