Segment类
Sefment集成ReentrantLock,具有加锁解锁的功能,segments有多少个元素,说明就有多少把锁,扮演了分段锁,降低并发竞争度
只有写才会对对应的Segment加锁,读不加锁
为什么需要CopyOnWriteArrayList?
ArrayList当读写线程同时运行时,使用fast-fail机制,抛出ConcurrentModifficationException异常
ArrayList在读写线程同时运行时,无法满足开发者需求
改用CopyOnWriteArrayList后:
读写同时进行时,不会抛出ConcurrentModificationException异常
优点:
线程安全,可以兼容读写并发
缺点:
耗内存(写时复制)
数据实时性不高,可能获取到旧数据
COWAL 使用场景:
读多写少,如白名单黑名单等
集合数量不大
数据要求不是强实时