java Thread和Runable的深刻理解

线程(Thread)是指程序的运行流程,多线程机制指同时运行多个程序块。

Java中实现多线程有两种方法:继承Thread类;实现Runnable接口。

Thread类的run()方法的制定者:接口Runnable中的run();

在Thread类中没有完全实现Runnable接口中的run()方法。

Thread类是Runnable接口的子类,Thread类中的run()方法调用的是Runnable接口中的run()方法。

接口是由全局变量和公共抽象方法所组成的。

所以,在Thread子类中,必须覆写Thread类中的run()方法。

启动线程时,不能直接调用run()方法,而是调用从Thread类中继承而来的start()方法。

如果一个类继承了Thread类,那么只能调用一次start()方法,如果多次调用,

将会出现“IllegalThreadStateException”异常。

Runnable接口中只有一个方法:run();

Runnable、Thread中的run方法和自定义的run方法之间的关系:

interface Runnable{                //Runable接口的定义

    public abstract void run();

}                          //remove method body

public class Thread implements Runnable {    //Thread类的部分定义

   private Runnable target; //封装

   public Thread(Runnable target){ //构造函数

      init(target);

   }

   private void init(Runnable target2) { //检验关口,给属性赋值

      this.target = target;

   }

   public void run() {

      if(target != null){

        target.run();           //此run方法指的是自定义的run方法,即Runable中的run方法

                         //整个过程中,只有一个对象,只有这个对象有能力调用自定

                         //义的run方法。

      }

   }

}

class MyThread implements Runnable{      

  public void run() {            //自定义的run方法

  }

}

由于使用Runable的整个过程中,只产生一个对象,所以可以方便地实现资源的共享。

这也是Runable优于Thread之处。