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之处。