1. 线程概念 | 继承Thread类,自定义的子类就是一个线程类 | 建立子类的对象,调用Thread类中的start方法 start方法,开启线程,JVM会自动调用该线程的run方法 =====================================================
| 覆盖接口中的run方法 | 调用Thread类中的start方法,开启线程
两种方式的区别 | 接口可以多实现,实现Runnable接口方式,避免了单继承的局限性 | 实现Runnable接口的方式,线程操作的数据是共享的
3. 多线程的状态图 | 运行 start | 冻结 放弃执行资格,放弃CPU的执行权 | wait() notify() notifyAll() |-- 临时阻塞 有执行资格,没有CPU的执行权,等待CPU来处理
4. 线程的名字 Thread-编号开始,编号从0开始 | 还可以使用Thread类的构造方法,自己设置线程的名字
| 如果不是Thread类,也不是子类 Threa.currentThread().getName() | 引出了线程操作共享数据的安全隐患 | 解决办法使用同步代码块来实现的 synchronized(对象){ 就是线程操作的共享数据 } | 如果一个函数中,所有的代码,都是线程操作的共享数据,函数修饰成同步的 synchronized写在函数上 | 静态函数的锁是本类名.class 写同步代码块锁也是本类名.class
7 .死锁案例 | 由于延迟加载对象,导致了线程的安全性 | <a href="ASP.Net+Android+IOS‘>http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href=".Net‘>http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------