1.为什么要重新Thread
因为Thread的run()方法是空的,如果需要执行自己的内容,需要继承Thread然后重写run方法
2.为什么新线程调用run不能开启多线程
因为多线程启动是使用start()方法开启的,而不是使用run()方法。
通过getCurrentThread().getName()可以得知调用run()方法是单线程执行的。
3.线程状态图
4.使用Runnable创建线程的好处
1>.让实现类的任务抽象出来,2>.让对象可以实现非线程类的继承。
5.线程安全的问题产生和问题解决
1>.产生的原因是 多线程在操作共享的数据,操作共享数据的代码有多条。
2>.使用synchronized来解决。加锁一定得使用成员变量,不能使用局部变量(可以从堆栈的角度理解)