黑马程序员技术交流社区

标题: 关于多线程创建的问题 [打印本页]

作者: Massive    时间: 2013-11-15 21:15
标题: 关于多线程创建的问题
刚学到多线程创建,遇到一点问题,求解。

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有关系吗? 什么关系?
    求解答的详细点,困扰啊!

作者: Sasson    时间: 2013-11-15 21:36
因为你这个线程是采用实现Runnable,因为它没start()方法,所以就必须要new一个Thread(把你实现Runnable的线程传进去),来调用它的start()方法
作者: 王裕秋    时间: 2013-11-15 21:45
在Java中,实现多线程操作有两种方式,一种是继承java.lang包下的Thread类,覆写Thread类的run()方法,在run()方法中实现运行在线程上的代码。另一种就是实现java.lang.Runnable接口,同样是在run()方法中实现运行在线程上的代码。两种方式的区别在于,继承Thread类可以直接启动线程,实现Runnable接口不能直接启动线程,需要先创建Thread类的实例对象,通过Thread类的构造方法传入实现了Runnable接口的实例对象,然后通过Thread类来启动线程。

作者: smileven    时间: 2013-11-15 22:01
new Thread在这里是新建一个线程对象。然后将Runnable子类对象作为参数传递给Thread类。

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

作者: @ne_pie尒ce    时间: 2013-11-15 22:35
要创建线程就必须通过new Thread()创建一个线程对象,
而通过实现Runnable接口得到的子类对象并不是一个线程,
但你又要去执行重写Runnable接口中run()方法中的代码,
所以就需要把实现Runnable接口得到的子类对象,
也就是你在这里写的匿名内部类作为参数传给new Thread();
Thread与Runnable的关系是,Thread实现了Runnable接口,
重写了run方法,为的是把线程代码都统一一下,都存放在run方法中
作者: 松毛    时间: 2013-11-15 22:52
这是实现Runnable接口创建线程的方式,需要通过Thread类建立线程对象,将Runnable接口的子类作为实际参数传递给Thread类的构造函数;
创建线程时,实现方式和继承方式的区别:
1、实现方式避免了单继承的局限性,在定义线程时,建议使用实现方法。
2、继承方式:线程代码存放在Thread子类run方法中;
   实现方式:线程代码存放在Runnable接口的子类run方法中。

作者: Massive    时间: 2013-11-16 00:06
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
Massive 发表于 2013-11-16 00:06
谢谢 你说的没有start方法所以要new一个Thread,因为Thread里面有run()这个方法是这样吗?
还有就是搞 ...

你这么一说 我也纠结了   我再去看看视频




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