线程安全问题
多个线程同时操作同一个共享资源的时候可能会出现业务安全问题,成为线程安全。
线程安全问题出现的原因?
- 存在多线程并发
- 同时访问共享资源
- 存在修改共享资源
处理线程安全问题方式:
方式一:同步代码块
作用:把出现线程安全问题的核心代码给上锁
原理:每次只能一个线程进入,执行完毕后自动解锁,其他线程才能进来执行
方式二:同步方法
作用:把出现线程安全问题的核心方法上锁
原理:每次只能一个线程进入,执行完毕后自动解锁,其他线程才能进来执行
方式三:lock锁
lock实现提供了更多的API可以获得更加灵活的操作
首先需要在实例方法中构建lock锁对象
其次在出现线程安全的地方上锁和解锁
为什么要将解锁方法放入finally中?
因为一旦在上锁成功之后,解锁之前代码出现异常,就会导致该程序无法解锁。其后的任何线程都无法进去程序,程序崩溃!