这是后端面试集锦第十六篇博文——java
锁面试话术❗❗❗
乐观锁的话就是比较乐观,每次去拿数据的时候,认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制
或者CAS
算法实现。
乐观锁在读操作比较多的场景比较适用,这样可以提高吞吐量,就像数据库提供的write_condition
机制,其实都是乐观锁。
悲观锁的话就是每次去拿数据的时候,也认为别人会修改数据,这个时候就会加上锁,这就导致其他线程想拿数据的话,就会阻塞,直到这个线程修改完成才会释放锁,让其他线程获取数据。
在数据库里的行级锁、表级锁都是在操作之前就先锁住数据再操作数据 ,都属于悲观锁。
Java
中的synchronized
和ReentrantLock
等独占锁就是悲观锁思想的实现。
·Java·中各种锁其实都是悲观锁的实现,在操作数据的时候,数据都会被当前线程锁住。
公平锁:
指线程在等待获取同一个锁的时候,是严格按照申请锁的时间顺序来进行的。
这就意味着在程序正常运行的时候,不会有线程执行不到的情况,但是也需要额外的机制来维护这种顺序,所以效率相对于非公平锁会差点。
非公平锁&
本文发布于:2024-01-28 05:46:06,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063919725225.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |