黑马程序员技术交流社区

标题: Thread VS Runnable (小知识点) [打印本页]

作者: 曹睿翔    时间: 2013-5-5 20:29
标题: Thread VS Runnable (小知识点)
本帖最后由 曹睿翔 于 2013-5-5 20:33 编辑

    Thread是线程对象,Runnable主宿主对象。

       测试以下代码,在以下代码中,给Thread类的构造方法传递了一个Runnable实例,同时也实现了Threadrun方法,那么Thread.start()具体会执行哪一个Run方法呢?
       结果为运行Threadrun方法。
   
  1. public static void main(String[] args) throws Exception {
  2.        new Thread(new Runnable() {//给Thread的构造方法传递一个Runnable接口
  3.            public void run() {
  4.               while(true){
  5.                   try {
  6.                      Thread.sleep(1000);
  7.                   } catch (InterruptedException e) {
  8.                      e.printStackTrace();
  9.                   }
  10.                   System.err.println("Runnable的RUN方法:"+Thread.currentThread().getName());
  11.               }
  12.            }
  13.        }){
  14.            public void run() {//同时实现Thread的run方法,这段代码会运行
  15.               while(true){
  16.                   try {
  17.                      Thread.sleep(1000);
  18.                   } catch(InterruptedException e) {
  19.                      e.printStackTrace();
  20.                   }
  21.                   System.err.println("线程的RUN方法:"+Thread.currentThread().getName());
  22.               }
  23.            };
  24.        }.start();
  25.     }
复制代码
为什么会运行Thread类中的run方法呢?查看Thread类源代码的run方法如下:
public void run() {
    if (target != null) {
        target.run();
    }
}
target就是Runnable类的对象。可见,如果子类不覆盖run方法,且存在target的情况下,即会运行targetrun方法。所以,更准确的说,Runnable不是一个线程,而是一个线程执行的宿主对象。


欢迎大家讨论!!




作者: 黑马伍哲沂    时间: 2013-5-6 07:22
不用讨论了。。 这是对的。。。




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