悲观锁(Pessimistic Lock)
顾名思义,就是采取很悲观的策略,总是假设最坏的情况。每次取数据时都认为其它线程会修改这个数据,所以无论共享数据是否真的会出现竞争,它都要进行加锁。这样的话,当其它线程想要访问数据时都需要阻塞挂起。JVM 实现的 synchronized 的思想就是悲观锁。
乐观锁(Optimistic Lock)
乐观锁就是采取乐观的策略,总是认为不会产生并发问题。每次取数据的时候总认为不会有其它线程修改共享数据,因此不会上锁。而是在更新数据时再判断其它线程是否修改过数据。CAS 操作就是乐观锁的思想。
两者的应用: 读取频繁使用乐观锁,写入频繁使用悲观锁。