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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 。。。。。。。 中级黑马   /  2013-11-6 09:56  /  1362 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

(四个问题)
创建新执行线程有两种方法,第二种通过实现Runnable接口的方式中为什么要把Runnable接口的子类对象传递给Thread类的构造函数呢?
这样传递过去以后Thread类的对象会发生什么样的变化呢?难道就可以直接调用start方法了吗?
还有就是让多线程启动到底是Thread类的对象还是Runnable接口的子类对象呢?


评分

参与人数 1技术分 +1 收起 理由
特殊服务 + 1

查看全部评分

3 个回复

倒序浏览
1. 因为,自定义的run方法所属的对象是Runnable接口的子类对象。所以要让线程去指定指定对象的run方法。就必须明确该run方法所属的对象。
2.传递过去以后Thread类的对象可以调用Runnable接口子类的run方法。
3.可以直接调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
4.让多线程启动是Thread类的对象。
例如卖票代码中:Thread t1=new Thread(t);
                       t1.start();
回复 使用道具 举报
第一:线程执行的是run方法的内容,是不是对象中必须要有一个run方法才会被新线程执行,你觉得哪个对象中必须的有run方法,是不是实现了Runnable的接口的对象
第二:你要我开启一个新的线程,那么这个新的线程该干什么,你是不是通过参数的方式把要执行的对象传递给我,我去执行你这个对象中的run方法,
第三:Runnable只用作标识,具体的实现应该是Thread
回复 使用道具 举报
简单说吧,你要创建一个线程就必须创建一个Thread类,由这个类的对象去执行线程{new Thread(线程).start()},再说简单点Thread类就是用来执行线程的工具,你要执行线程就必须要用Thread类,接下来说这个Thread中的参数,这个参数就是你要执行的线程,而线程的实现由两种方法,1、继承Thread,2、实现Runnable接口,解释一下两种方法,第一种,继承Thread类,如class Demo extends Thread,这个时候建立线程就不需要参数了,因为Thread这个类实现了Runnable接口,Demo继承了Thread,等于Demo在调用自身的run方法,这里既继承了Thread执行线程的能力也实现了Runnable中的run方法;第二种,实现Runnable接口,必须复写Runnable中的run()方法,这个时候Thread的建立就必须要参数了(告诉Thread工具你要执行的是哪个线程),这个参数就是你实现了Runnable接口的类的对象,然后用这个你建立的工具(就是Thread的对象)去调用start()方法,说完了,说得这么好!深得毕老师真传呐!赞一个!

评分

参与人数 1技术分 +1 收起 理由
特殊服务 + 1

查看全部评分

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