乐观锁
乐观锁一般用于读多写少的情况,乐观锁在每次获取数据的时候都乐观地认为别人不会修改,所以不会给该数据上锁,但是在修改数据的时候会判断一下该数据在获取数据后是否被别人修改过,如果被别人修改过则放弃修改,否则才修改成功。常采用在数据中增加版本号或者时间戳的方式,或者使用CAS操作实现(关于CAS)。 java中的ConcurrentHashMap就是用乐观锁实现的。
悲观锁
悲观锁一般用于写多的情况,悲观锁在每次获取数据的时候都悲观地认为别人会修改,所以每次都会给该数据上锁,直到修改完成才会释放锁,如果别人想要修改数据,只能等到锁被释放。java中的Synchronized关键字就是悲观锁。