注意以下的问题
此处的start调用的应该是Thread的run方法,而该创建方法中并没有重写Thread的run方法,为什么会调用呢??
答案
可以从Thread的源码中去找
1.进入Thread找到run()方法
此处有一个target我们来看看
有一个Runnable类型的变量,我们正好前面定义对象时传入了Runnable的参数,再看看构造函数
看到这差不多就明白了。
从上往下看当有target参数传进来时,会调用此方法,从而调用Runnable的run()方法。
另:卖票窗口的题目
注意:若使用第一种继承方法,则需要给ticket属性加上static。
而该方法不需要,因为公用的一个对象。
但是以上两种方法都存在安全问题。窗口1,2,3都卖了票号为100的号
创建线程两种方式的比较
开发中:优先选择实现Runnable接口的方式
原因:1.实现的方式没有类的单继承性的局限性
2.实现的方式更适合处理多个线程有共享数据的情况
联系:public class Thread implement Runnable
相同点:两种方式都需要重写run方法,线程要执行的逻辑声明在run()中