悲观锁

悲观锁每次都会假设最坏的情况,每次获取数据时都会上锁,因此每次其他线程都会阻塞直到获取到锁。
悲观锁适用于写操作很多的应用类型
传统数据库中,用到了很多这些锁机制,例如行锁、表锁
Java中,synchronized和ReentrantLock等独占锁就是悲观锁思想的体现

乐观锁

乐观锁每次都会假设最好的情况,别人获取数据时不会加锁,但是更新数据时,会先判断该数据是否已经被更新过了。
乐观锁非常适合于查询多的应用类型,因为可以提高吞吐量
如果数据库提供write condition机制,则提供的就是乐观锁
Java中,java.util.concurrent.atomic包下的原子类,就是通过CAS实现的乐观锁