java中的锁——分段锁

【笔记】java中的所有锁


ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。Segment是一种可重入锁ReentrantLock,在ConcurrentHashMap里扮演锁的角色,HashEntry则用于存储键值对数据。一个ConcurrentHashMap里包含一个Segment数组,Segment的结构和HashMap类似,是一种数组和链表结构, 一个Segment里包含一个HashEntry数组,每个HashEntry是一个链表结构的元素, 每个Segment守护者一个HashEntry数组里的元素,当对HashEntry数组的数据进行修改时,必须首先获得它对应的Segment锁。
在这里插入图片描述

java.util.concurrent提供了工具类:

  • Map:ConcurrentHashMap、ConcurrentSkipListMap
  • Collection:ConcurrentSkipListSet、CopyOnWriteArrayList 和CopyOnWriteArraySet。
  • 当期望许多线程访问一个给定collection 时,使用ConcurrentHashMap替代HashMap
  • 当期望许多线程访问一个给定collection 时,使用ConcurrentSkipListMap替代TreeMap
  • ConcurrentSkipListSet(在JavaSE 6新增的)提供的功能类似于TreeSet,能够并发的访问有序的set。因为ConcurrentSkipListSet是基于“跳跃列表(skip list)”实现的,只要多个线程没有同时修改集合的同一个部分,那么在正常读、写集合的操作中不会出现竞争现象
  • 当期望的读数和遍历远远大于列表的更新数时,使用CopyOnWriteArrayList 替代ArrayList。
  • 当期望的读数和遍历远远大于列表的更新数时,使用CopyOnWriteArraySet替代HashSet。

————>>ConcurrentHashMap分段锁机制
————>>ConcurrentHashMap分段锁代替HashTable的独占锁

ConcurrentHashMap将一个Map分成16端Segment
又将每一个Segment分成16端(hash表的长度也默认16)


java中的1.公平锁 / 非公平锁

java中的2.可重入锁 / 不可重入锁

java中的3.独享锁 / 共享锁/AOS

java中的4.互斥锁 / 读写锁

java中的5.乐观锁 / 悲观锁

java中的6.分段锁

java中的7.偏向锁 / 轻量级锁 / 重量级锁

java中的8.自旋锁

发布了50 篇原创文章 · 获赞 13 · 访问量 2403

猜你喜欢

转载自blog.csdn.net/endless_Y/article/details/104966747