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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Massive 中级黑马   /  2013-11-15 21:15  /  1507 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

刚学到多线程创建,遇到一点问题,求解。

public class DemoThread {
        public static void main(String[] args) {
             new Thread(new Runnable()) {
                      public void run() {
                               for(int x = 0; x < 1000; x++) {
                                     System.out.println("aa");
                                             }
                                 }
                        }
             }
}

这句话:     new Thread(new Runnable()) {            //创建Thread对象,将Runnable的子类对象以参数的形式传入

请问这个new Thread在这里是什么意思?    Thread跟Runnable有关系吗? 什么关系?
    求解答的详细点,困扰啊!

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

9 个回复

倒序浏览
因为你这个线程是采用实现Runnable,因为它没start()方法,所以就必须要new一个Thread(把你实现Runnable的线程传进去),来调用它的start()方法

点评

FFF
其实,你可以回复得再详细一点点。~  发表于 2013-11-15 23:26
回复 使用道具 举报
在Java中,实现多线程操作有两种方式,一种是继承java.lang包下的Thread类,覆写Thread类的run()方法,在run()方法中实现运行在线程上的代码。另一种就是实现java.lang.Runnable接口,同样是在run()方法中实现运行在线程上的代码。两种方式的区别在于,继承Thread类可以直接启动线程,实现Runnable接口不能直接启动线程,需要先创建Thread类的实例对象,通过Thread类的构造方法传入实现了Runnable接口的实例对象,然后通过Thread类来启动线程。

点评

FFF
+10086  发表于 2013-11-15 23:24
回复 使用道具 举报
new Thread在这里是新建一个线程对象。然后将Runnable子类对象作为参数传递给Thread类。

你在这是用实现Runnable接口的方法来创建线程。
(1)在这你复写了Runnable接口中的run方法。
(2)new Thread类创建线程对象。
(3)将Runnable接口的子类对象作为参数传递给Thread类的构造函数。
(4)启动线程,调用Runnable接口子类中的run方法。

评分

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

查看全部评分

回复 使用道具 举报
要创建线程就必须通过new Thread()创建一个线程对象,
而通过实现Runnable接口得到的子类对象并不是一个线程,
但你又要去执行重写Runnable接口中run()方法中的代码,
所以就需要把实现Runnable接口得到的子类对象,
也就是你在这里写的匿名内部类作为参数传给new Thread();
Thread与Runnable的关系是,Thread实现了Runnable接口,
重写了run方法,为的是把线程代码都统一一下,都存放在run方法中

评分

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

查看全部评分

回复 使用道具 举报
这是实现Runnable接口创建线程的方式,需要通过Thread类建立线程对象,将Runnable接口的子类作为实际参数传递给Thread类的构造函数;
创建线程时,实现方式和继承方式的区别:
1、实现方式避免了单继承的局限性,在定义线程时,建议使用实现方法。
2、继承方式:线程代码存放在Thread子类run方法中;
   实现方式:线程代码存放在Runnable接口的子类run方法中。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1

查看全部评分

回复 使用道具 举报
Massive 中级黑马 2013-11-16 00:06:09
7#
Sasson 发表于 2013-11-15 21:36
因为你这个线程是采用实现Runnable,因为它没start()方法,所以就必须要new一个Thread(把你实现Runnable的 ...

谢谢 你说的没有start方法所以要new一个Thread,因为Thread里面有run()这个方法是这样吗?
还有就是搞不懂的是Thread跟Runnable,为什么Runnable没有run方法就要new一个Thread,视频里是不是讲过,没看到啊.....
回复 使用道具 举报
Sasson 中级黑马 2013-11-16 00:11:55
8#
Massive 发表于 2013-11-16 00:06
谢谢 你说的没有start方法所以要new一个Thread,因为Thread里面有run()这个方法是这样吗?
还有就是搞 ...

你这么一说 我也纠结了   我再去看看视频
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马