标签:构造 新建 preview ast lock 释放 插入图片 出队 mvcc
该类自JDK8加入,是为了进一步优化读性能,它的特点是使用读锁、写锁时都必须配合【戳】使用
加解读锁
加锁写锁
乐观锁,StampedLock 支持 tryOptimisticRead()方法(乐观读),读取完毕后需要做一次戳校验,如果校验通过,表示这期间确实没有写操作,数据可以安全使用,如果校验没通过,需要重新获取读锁,保证数据安全。
信号量,用来限制能同时访问共享资源的线程上限。
用来进行线程同步协作,等待所有线程完成倒计时。
其中构造参数用来初始化等待计数值,await()用来等待计数归零,countDown()用来让计数减一
循环栅栏,用来进行线程协作,等待线程满足某个计数。构造时设置【计数个数】,每个线程执行到某个需要“同步”的时刻调用await()方法进行等待,当等待的线程数满足【计数个数】时,继续执行
线程安全集合类可以分为三大类 :
单词计数问题 :
重要属性和内部类
构造器分析
可以看到实现了懒惰初始化,在构造方法中仅仅计算了table的大小,以后在第一次使用时才会真正的创建
get流程分析
put流程
以下数组简称(table),链表简称(bin)
size计算流程
size计算实际发生在put、remove改变集合元素的操作之中
它维护了一个segment数组,每个segment对应一把锁
主要列举 LinkedBlockingQueue与ArrayBlockingQueue的性能比较
ConcurrentLinkedQueue的设计与LinkedBlockingQueue 非常像,也是
CopyOnWriteArraySet 是它的马甲
底层实现采用了写入时拷贝的思想,增删改操作会将底层数组拷贝一份,更改操作在新数组上执行,这时不影响其他线程的并发读、读写分离。
这里的源码版本是Java11,在Java1.8中使用的是可重入锁而不是synchronized,其它读操作并未加锁,例如 :
适合【读多写少】的应用场景
get弱一致性
迭代器弱一致性
不要觉得弱一致性就不好
标签:构造 新建 preview ast lock 释放 插入图片 出队 mvcc
原文地址:https://www.cnblogs.com/haizai/p/12360857.html