开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 19 天,点击查看活动详情
java锁
乐观锁
乐观锁认为数据读多写少,即在读取数据时没有上锁,在数据更新时要加上锁。乐观锁一般是通过CAS操作实现,比较当前值与传输值是否一致,一致则更新,不一致则返回更新失败。
悲观锁
悲观锁是在读取数据时会上锁,所以在数据要写入时是会被阻塞直到拿到锁。如使用Synchronized标志的类和方法,在操作的时候会上锁。 Synchronized作用范围:
- 作用于方法时,锁住的是对象的实例。
- 作用于静态方法时,锁住的是Class实例。是一个全局锁,锁住该类的所有方法。
- 作用于对象实例时,锁住的是所有以该对象为锁的代码块。
自旋锁
在没有抢到锁的线程不会立即进行阻塞状态,而是进行自旋,如果在自旋时间内抢到锁,就直接进行业务,而在自旋结束后还是没有抢到锁,才会进入阻塞状态。
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 19 天,点击查看活动详情