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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 焦健 于 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);
        }
}

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

12 个回复

正序浏览
我是冯日,好文共赏,我只是路过!!











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

回复 使用道具 举报
本帖最后由 张云杰 于 2013-1-13 18:28 编辑

题目是问参与几条打印, 我没错吧?  4条打印
回复 使用道具 举报
本帖最后由 张云杰 于 2013-1-13 18:29 编辑
惠晖 发表于 2013-1-13 17:41
你还是自己好好实验实验吧。。。


如果再加上主线程, 5条.. 题目是问打印几条?
回复 使用道具 举报
张云杰 发表于 2013-1-13 17:05
错, r1线程已经算在内了, 加上调用只有2个..

哥们,没有错,在主方法中通过Run2 的对象开启了两条线程,在Run2的run方法中调用了Run1的run,因为是两条线程执行Run2的run方法,所以Run1中的run方法被两条线程各调用一次,一共两次,所以又开启两条线程。。就是说,有两条线程执行Run2,有两条线程执行Run1,还有一条主线程,5条刚刚好。。参与打印的有4条线程。。。
回复 使用道具 举报
惠晖 中级黑马 2013-1-13 17:41:23
9#
张云杰 发表于 2013-1-13 17:05
错, r1线程已经算在内了, 加上调用只有2个..

你还是自己好好实验实验吧。。。
回复 使用道具 举报
惠晖 发表于 2013-1-12 23:04
一共5个线程 主函数是一个线程,   t.start()是调用Runnable接口的线程,  接口中又有个R1线程 此时是   3 ...

错, r1线程已经算在内了, 加上调用只有2个..
回复 使用道具 举报
焦健 高级黑马 2013-1-13 12:40:41
7#
惠晖 发表于 2013-1-12 23:04
一共5个线程 主函数是一个线程,   t.start()是调用Runnable接口的线程,  接口中又有个R1线程 此时是   3 ...

嗯,是这样的,谢谢了。。
回复 使用道具 举报
张云杰 发表于 2013-1-12 22:59
当r2 new的时候, 创建线程, t.start() , 往下执行, 调用r2方法, 因为你创建的是r2的线程 , 调用r2方法,   ...

嗯,谢谢了
回复 使用道具 举报
王少雷 发表于 2013-1-12 22:45
和你一起分析一下啊
程序入口:
Run2 r2=new Run2();

谢谢啊,哥们,我明白了。。
回复 使用道具 举报
一共5个线程 主函数是一个线程,   t.start()是调用Runnable接口的线程,  接口中又有个R1线程 此时是   3个了。 然后又来个t2.start()调用thread线程 thread线程run方法中又会创建个R1线程  所以是5个了    一共加起来 包括主函数  是5个
回复 使用道具 举报
当r2 new的时候, 创建线程, t.start() , 往下执行, 调用r2方法, 因为你创建的是r2的线程 , 调用r2方法,  进入r1.star() 1条, 然后进入for循环 合起来2条, 接着 r2调用自己的方法, r1.star()再次调用,for 循环, 所以总共是4条线程在打印..

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 王少雷 于 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个线程。

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 很给力!

查看全部评分

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