您现在的位置是:主页 > news > 电子商务网站规划的内容/专业网站建设公司首选

电子商务网站规划的内容/专业网站建设公司首选

admin2025/5/2 6:45:02news

简介电子商务网站规划的内容,专业网站建设公司首选,ps cs6做网站框架的插件,网站空间免费试用遗留的安全集合和修饰的安全集合都是使用synchronized修饰整个方法 Java8:ConcurrentHashMap 结构和HashMap一样,数组加链表,但是不允许空键值 Get():取值 全程无锁 如果头结点的哈希值为-1,表示正在扩容;如果头结点的…

电子商务网站规划的内容,专业网站建设公司首选,ps cs6做网站框架的插件,网站空间免费试用遗留的安全集合和修饰的安全集合都是使用synchronized修饰整个方法 Java8:ConcurrentHashMap 结构和HashMap一样,数组加链表,但是不允许空键值 Get():取值 全程无锁 如果头结点的哈希值为-1,表示正在扩容;如果头结点的…

在这里插入图片描述

遗留的安全集合和修饰的安全集合都是使用synchronized修饰整个方法

Java8:ConcurrentHashMap
结构和HashMap一样,数组加链表,但是不允许空键值
Get():取值
全程无锁
如果头结点的哈希值为-1,表示正在扩容;如果头结点的哈希值为-2,表示该链表已经变为红黑树了,这时调用对应的方法去取值
如果头结点的哈希值大于0,说明是链表,直接取值即可,这里不会取到脏数据,因为值用了volatile修饰
在这里插入图片描述

PutVal():放值
如果哈希表为空,则调用initTable()(cas实现)来初始化表
如果没头结点,说明没哈希冲突,自己当头结点(cas设置
如果头结点哈希值为-1,说明正在扩容,帮忙扩容
如果有头结点,说明有哈希冲突,锁头结点,遍历链表找是否有相同key,相同则替换;没有则追加结点到尾部
最后要调用addCount()来进行元素数量的更新

InitTable():初始化数组
sizeCtl=0 代表没有线程正在初始化数组
sizeCtl=-1 代表有线程正在初始化数组
while(数组为空){
如果sizeCtl<0,说明有其他线程正在初始化数组,则yield
如果sizeCtl==0,用cas尝试把sizeCtl从0改为1
如果更改成功,初始化数组,并且把sizeCtl改为数组长度
如果更改失败,continue
}

Transfer():扩容
新建一个数组,长度是原来数组的两倍,然后开始搬迁链表
如果头结点为空,说明这个链表已经被处理完了,用cas把链表头替换成forwarding;
如果头结点的哈希值为-1,说明这个链表正在被别的线程处理或者以及处理完了,则去处理下一个链表;
如果不为空,说明要处理这个链表,锁住头结点进行处理

Java7:ConcurrentHashMap
结构:Segment数组,数组的元素为数组加链表,套娃,对每个Segment数组元素单独加锁,也就是分段锁,提高了并发
在这里插入图片描述

LinkedBlockingQueue:两把ReentranLock锁putlock、takelock,两个条件变量notFull、notEmpty
ConcurrentLinkedQueue:也是两把锁,不过是用CAS实现的,用在tomcat里面,用于Acceptor和Poller连接

CopyOnWriteArraylist:写入时复制,写时都会复制一份数组进行写,读的话还在原来的数组中读,读写分离但弱一致性(因为写完时对数组引用进行覆盖,但是读之前获取的是旧引用,指向的是旧对象,你只修改了引用没有修改对象,所以读的是之前的数组),适合读多写少场景