前面已经提到过通过继承Thread类创建线程,将线程的任务定义在重写的run方法即可。但是由于Java是单继承机制,假如某个业务类已经继承了一个父类同时有希望作为一个线程类,这样就无法再继承Thread类了,不过Thread类在设计时提供了一个插件机制来让我们通过插件的方式来实现线程。这个所谓的插件机制就是通过向外公开接口,来实现线程功能。先了解一下Thread类源码:
public
classThreadimplementsRunnable {
private Runnable target;
public Thread(Runnable target) {
this.target=target;
}
public void run() {
if (target != null) {
target.run();
}
}
}
我们可以看到Thread提供了Runnable接口作为参数的构造方法。Runnable接口只定义了一个抽象方法run。该构造方法将参数的Runnable接口的实现类对象传递自身的Runnable接口引用。再看run方法,判定引用的Runnable接口是否存在,若不存在则线程空操作,实现上这种是继承的子类需要重写。若判定引用的Runnable接口存在,则按照Runnable接口实现类的run方法去执行线程,是这直接使用Thread类来创建对象,前置条件Runnable接口实现类作为构造方法参数。
由此我们可以得这样的结论:业务类也要实现线程功能,只需要实现Runnable接口,将线程的任务定义在run方法,然后将业务类对象作为参数使用Thread(Runnable)构造方法来创建Thread对象。