Thread类和Runnable接口一对好基友

来源:互联网 发布:前端调用接口js加密 编辑:程序博客网 时间:2024/06/06 13:18

事实上Thread类和Runnable接口不是好基友,就像很多人被说成是基友其实只是关系好的同性好友而已。。

只有Thread类的start()方法才能真正实现多线程。

线程的运行内容是靠重写run()方法。

这两个方法是多线程的关键。

Runnable 接口没有start()方法,更没有start()方法的实现。所以要真正使用多线程,还是得借由Thread类生成Thread对象,调用start()方法。

他俩到底是什么关系呢??

通过源码可以发现,Thread 类有个start()方法,还有个run()方法。start()方法调用了本地实现,内情不得而知,总之是实现了多线程,应该是和操作系统发生了关系吧。。

而run()方法之前还有必要说明,Thread类有个Runnable的成员变量,毫无疑问携带了自己的run()方法。Thread类的run()方法就对此变量进行了判断,如果不为空则调用该变量的run方法。而此变量何时被赋值呢?就在Thread类的带参构造方法中,该方法接受Runnable类型参数。真相就在于此了!

总结下,如果Thread类被继承并重写run方法,则Runnable变量为Null,就没它的事了。运行的都是继承类的run()方法内容。

如果Runnable接口被实现,并重写run()方法(这是一定会被重写的),则需要将此对象传入到Thread()带参构造方法中,再start()就是调用该实现了Runnable接口对象的run()方法了。