jdk的多线程处理机制各有什么优缺点,实用于什么场景

synchronized:同步机制
cas:比较交互
threadlocal:创建变量副本
volidate:保持可见性
lock:显示锁

阅读 2k
4 个回答

在数据库领域,并发控制的方式有以下几种:

  • 基于锁的协议
  • 基于有效性检查的协议(CAS)
  • 基于时间戳的协议(java没有)
  • 多版本并发控制(MVCC java没有)
  • 快照隔离(java没有,有点像threadlocal?)

你上面罗列的都属于前两项,自己可以搜一下相关细节

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在近版本中由于多次优化,效率已经差不多了,缺点是必须注意释放。

新手上路,请多包涵

的士大aad

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题