小米科技:Java并发编程:悲观锁和乐观锁机制( 二 )


乐观锁虽然会基于对比检测的手段判断更新的数据是否有变化 , 但是不确定数据是否变化完成 , 例如线程1读取的数据是A1 , 但是线程2操作A1的值变化为A2 , 然后再次变化为A1 , 这样线程1的任务是没有感知的 。
悲观锁每一次数据修改都要上锁 , 效率低 , 写数据失败的概率比较低 , 比较适合用在写多读少场景 。
乐观锁并未真正加锁 , 效率高 , 写数据失败的概率比较高 , 容易发生业务形异常 , 比较适合用在读多写少场景 。
是选择牺牲性能 , 还是追求效率 , 要根据业务场景判断 , 这种选择需要依赖经验判断 , 不过随着技术迭代 , 数据库的效率提升 , 集群模式的出现 , 性能和效率还是可以两全的 。
三、Lock基础方法lock:执行一次获取锁 , 获取后立即返回;
lockInterruptibly:在获取锁的过程中可以中断;
tryLock:尝试非阻塞获取锁 , 可以设置超时时间 , 如果获取成功返回true , 有利于线程的状态监控;
unlock:释放锁 , 清理线程状态;
【小米科技:Java并发编程:悲观锁和乐观锁机制】newCondition:获取等待通知组件 , 和当前锁绑定;