这是传统线程的两种创建方式的合用。
即创建Thread的子类对象,并覆盖它的run()方法;
同时又实现Runnable接口,覆盖接口的run(),再创建它的对象作为Thread类的构造函数的参数进行传值。
查看Thread类的run()方法的源代码,可以看到其实这两种方法都是在调用Thread对象的run(),所以如果已经覆盖了它的run()方法,就会直接调用它的run(),-------因此运行的结果是 “subThread run”。假如没有覆盖的话,并为该Thread队形设置一个Runnbale对象,该run()会调用runnable对象的run()。所以就是这个顺序,先看自己有没有,有的就直接用自己的,没有再调用runnable()的。 |