目标
1、理解线程安全?
1.1 为什么有线程安全问题?
当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。但是做读操作是不会发生数据冲突问题。
1.2 线程安全解决办法:
(1)问:如何解决多线程之间线程安全问题?
答:使用多线程之间同步或使用锁(lock)。
(2)问:为什么使用线程同步或使用锁能解决线程安全问题呢?
答:将可能会发生数据冲突问题(线程不安全问题),只能让当前一个线程进行执行。代码执行完成后释放锁,让后才能让其他线程进行执行。这样的话就可以解决线程不安全问题。
(3)问:什么是多线程之间同步?
答:当多个线程共享同一个资源,不会受到其他线程的干扰。
2、synchronized用法
2.1 什么是同步代码块?
答:就是将可能会发生线程安全问题的代码,给包括起来。
synchronized(同一个数据){
可能会发生线程冲突问题
}
2.2 同步函数
(1) 什么是同步函数?
答:在方法上修饰synchronized 称为同步函数
(2)同步函数用的是什么锁?
答:同步函数使用this锁。
2.3 静态同步函数
答:什么是静态同步函数?
方法上加上static关键字,使用synchronized 关键字修饰 或者使用类.class文件。
静态的同步函数使用的锁是该函数所属字节码文件对象 ,可以用 getClass方法获取,也可以用当前 类名.class 表示。
synchronized (ThreadTrain.class) {}
总结:
synchronized 修饰方法使用锁是当前this锁。
synchronized 修饰静态方法使用锁是当前类的字节码文件
3、多线程死锁
1、什么是多线程死锁?
答:同步中嵌套同步,导致锁无法释放
3、死锁