synchronized:同步机制
cas:比较交互
threadlocal:创建变量副本
volidate:保持可见性
lock:显示锁
synchronized:单纯的锁,由jdk底层维护并优化,类似于悲观锁,安全,但是效率偏低
cas:比较并交换,用副本和内存值比较,如果相同就直接交换地址,效率高,但容易产生aba问题
threadlocal: 和线程绑定的变量,没啥难理解的吧
volidate: 保持可见性,由于jmm针对于volidate的特殊规则,use,load双向绑定,load,read连续绑定,,assgin,store 双向绑定store,write连续绑定,所以具有可见性,针对于多线程一写多读,不存在读取缓存导致结果错误的问题,针对于 read,load,use 或者 assgin,store,write 必须按照先后顺序执行,所以禁止重排序。
lock: synchronized 的 增强版,包括公平性,非块状结构,尝试获取等功能,参照api,开始效率高于 synchronized,但synchronized在近版本中由于多次优化,效率已经差不多了,缺点是必须注意释放。
4 回答1.3k 阅读✓ 已解决
4 回答1.2k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
2 回答721 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.7k 阅读
2 回答1.3k 阅读
在数据库领域,并发控制的方式有以下几种:
你上面罗列的都属于前两项,自己可以搜一下相关细节