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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄小钒 中级黑马   /  2012-3-25 17:48  /  2861 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下:

代码运行结果如下:

我的问题是:既然d.run 仅仅是对象调用方法,线程创建了,并没有运行,但当我在run() 方法里获取当前线程的名称,线程的名称却是Thread-0 , 此处有一点不解, 请高手解答,谢谢!

评分

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

查看全部评分

9 个回复

正序浏览
黄奇耀 发表于 2012-3-25 18:47
Demo d = new Demo(); //创建Thread对象,分配了内存,并在内存中存放着其对象
d.run();//没有调用start() ...

有点明白了, 谢谢楼上各位的指点,也感谢那位画图的同学,图画的很美观 :D
回复 使用道具 举报
Demo d = new Demo(); //创建Thread对象,分配了内存,并在内存中存放着其对象
d.run();//没有调用start()方法,没有启动新线程。run()方法只是在方法体内保存要多线程的代码。
获取到Thread-0线程名,是刚刚创建线程的名称。主线程名称一般名为main。
回答下3楼的追问:Thread-0 这个线程没有启动,因为没有调用start()方法。

评分

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

查看全部评分

回复 使用道具 举报
李成 中级黑马 2012-3-25 18:26:27
7#
本帖最后由 李成 于 2012-3-25 18:30 编辑

start()方法本身就是调用线程里的run()方法他俩的区别文字也不好说给你画了图

start()是在主线程外开始运行一个新的线程,run()的就在主线里执行线程的run方法说白了就是主线程直接执行了这个线程。

评分

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

查看全部评分

回复 使用道具 举报
黄小钒 发表于 2012-3-25 18:06
那是不是说 这里只有一个主线程在运行,而Thread-0 这个线程并没有运行?

是啊  你创建的那个线程没有运行  他里面的的成员属性随着你创建线程对象已经存在了
回复 使用道具 举报
你已经创建了线程了,但是没有启动只是运行了。
回复 使用道具 举报
贠(yun)靖 发表于 2012-3-25 17:56
就是因为你创建了一个线程啊   你Demo继承了Thread类   所以Demo中的成员属性和成员方法 也就继承了  Threa ...

那是不是说 这里只有一个主线程在运行,而Thread-0 这个线程并没有运行?
回复 使用道具 举报
创建了线程  你没有开启不就是个废的吗?  所以他只会沿着主函数开辟的线程来进行
回复 使用道具 举报
就是因为你创建了一个线程啊   你Demo继承了Thread类   所以Demo中的成员属性和成员方法 也就继承了  Thread类中的非私有的成员属性和方法
   而Thread类中 默认给每一个线程都起名字了 你调用getName方法就是继承父类的get方法   显然就有名字了  
  所以说只要你创建了一个线程 不管启动不启动 这个线程已经存在在内存中了  像你这种测试  可以理解为 仅仅没有让线程运行而已  而这个线程该有的功能和属性都已经具备了

评分

参与人数 1黑马币 +3 收起 理由
房宝彬 + 3 看来技术分已经不能满足你了,给你点钱把,.

查看全部评分

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