乐观锁:
每次读数据时认为不会被第三方修改,所以无需加锁;写数据时要判断在此期间是否有第三方修改数据。
乐观锁适用于多读的应用类型,数据库技术中常用版本号控制。乐观锁在 Java 中通过无锁实现,最常用的是 CAS 算法,Java 原子类中递增操作就通过 CAS 自旋实现。
乐观锁适合读多写少的场景。
悲观锁:
每次操作数据时假定第三方会修改数据,所以每次操作数据时上锁;这样别人想拿这个数据就会阻塞直到它拿到锁。