当前位置: 首页 > news >正文

网站建设必学课程网站编辑制作

网站建设必学课程,网站编辑制作,网站建设更改,企业网站设计素材目录 什么是ConcurrentHashMap#xff1f;为什么有ConcurrentHashMap#xff1f;和HashMap区别示例代码对比 JDK7和JDK8中ConcurrentHashMap整体架构的区别JDK7中JDK8中 ConcurrentHashMap的基本功能在性能方面的优化使用到的技术-CAS概念说明比较并交换的过程如下#xff1… 目录 什么是ConcurrentHashMap为什么有ConcurrentHashMap和HashMap区别示例代码对比 JDK7和JDK8中ConcurrentHashMap整体架构的区别JDK7中JDK8中 ConcurrentHashMap的基本功能在性能方面的优化使用到的技术-CAS概念说明比较并交换的过程如下举例说明底层原理代码演示 总结 什么是ConcurrentHashMap ConcurrentHashMapConcurrent并存的同时发生的     ConcurrentHashMap是Java中的一个线程安全的哈希表实现它可以在多线程环境下高效地进行并发操作。 为什么有ConcurrentHashMap HashMap线程不安全在多线程操作下可能会导致数据错乱 和HashMap区别 示例代码对比 使用HashMap和ConcurrentHashMap分别实现以下需求。         用30个线程向实例化出的map中插入keyvalue。每一次插入后把map打印出来for循环中sout         key为for循环中的i值         value使用UUID public class HashMapUnsafeTest {public static void main(String[] args) throws InterruptedException {//演示HashMapMapString, String map new HashMap();for (int i 0; i 30; i) {String key String.valueOf(i);new Thread(() - {//向集合添加内容map.put(key, UUID.randomUUID().toString().substring(0, 8));//从集合中获取内容System.out.println(map);}, ).start();}} }public class ConcurrentHashMapSafe {public static void main(String[] args) throws InterruptedException {//演示ConcurrentHashMapMapString, String map new ConcurrentHashMap();for (int i 0; i 30; i) {String key String.valueOf(i);new Thread(() - {//向集合添加内容map.put(key, UUID.randomUUID().toString().substring(0, 8));//从集合中获取内容System.out.println(map);}, ).start();}} }多个线程同时对同一个集合进行增删操作导致错误 JDK7和JDK8中ConcurrentHashMap整体架构的区别 JDK7中 JDK8中 使用到的数据结构数组、单向链表、红黑树 其中涉及到几个核心的参数 // 最大容量2^30 private static final int MAXIMUM_CAPACITY 1 30; // 默认长度 private static final int DEFAULT_CAPACITY 16;//遗留问题为什么树化条件是8而取消树化条件却是6呢 // 链表树化条件-是根据线程竞争情况和红黑树的操作成本进行设计的。 static final int TREEIFY_THRESHOLD 8; // 取消树化条件-为了避免过度的树化防止内存占用过高。 static final int UNTREEIFY_THRESHOLD 6; //链表结构中每个节点只需要存储指向下一个节点的指针而不需要存储节点的值。因此链表只需要存储节点的引用占用较少的内存空间。树结构中每个节点需要存储节点的值以及指向子节点的指针。核心为Hash表存在Hash冲突问题     使用链式存储方式解决冲突冲突较多时导致链表过长查询效率较低在JDK1.8中引入红黑树机制     当数组长度大于64且链表长度大于等于8时单项链表转为红黑树     当链表长度小于6时红黑树会退化为单向链表 ConcurrentHashMap的基本功能 本质上是一个HashMap功能和HashMap是一样的     但ConcurrentHashMap在HashMap基础上提供了并发安全的实现主要通过对node节点加锁实现来保证对数据更新的安全性 锁粒度变小 在性能方面的优化 在JDK1.8中锁的粒度是数组中的某一个节点在JDK1.7中锁定的是一个Segment锁的范围更大     保证线程安全机制         JDK7采用segment的分段锁机制实现线程安全其中segment继承自ReentrantLock。         JDK8采用CAS(读)Synchronized(写)保证线程安全。 锁的粒度原来是对需要进行数据操作的Segment加锁JDK8调整为对每个数组元素加锁Node。 链表转化为红黑树定位结点的hash算法简化会带来弊端Hash冲突加剧因此在链表节点数量大于8时会将链表转化为红黑树进行存储。 使用到的技术-CAS 概念说明 CAS的全称是比较并交换Compare And Swap。在CAS中有这样三个值     V要更新的变量(var)     E预期值(expected)     N新值(new) 比较并交换的过程如下 判断V是否等于E如果等于将V的值设置为N如果不等说明已经有其它线程更新了V则当前线程放弃更新什么都不做。 举例说明 如果有一个多个线程共享的变量i原本等于5我现在在线程A中想把它设置为新的值6; 我们使用CAS来做这个事情     首先我们用i去与5对比发现它等于5说明没有被其它线程改过那我就把它设置为新的值6此次CAS成功i的值被设置成了6     如果不等于5说明i被其它线程改过了比如现在i的值为2那么我就什么也不做此次CAS失败i的值仍然为2。 底层原理 unsafe类——以下是类中涉及到的三个方法用来实现CAS效果的这三个方法都是由native进行修饰的。具体的实现是由C写的。 代码演示 没有使用CAS的代码 package com.example.threadpool.CAS;public class NoCASDemo {private static int counter 0;public static void main(String[] args) throws InterruptedException {//线程一Thread thread1 new Thread(() - {for (int i0; i10000;i){counter;}});//线程二Thread thread2 new Thread(() - {for (int i0; i10000;i){counter;}});//执行线程thread1.start();thread2.start();//等待执行完线程1和2thread1.join();thread2.join();System.out.println(查看counter的总数counter);}}使用CAS的代码 package com.example.threadpool.CAS;import java.util.concurrent.atomic.AtomicInteger;public class CASDemo {private static AtomicInteger counter new AtomicInteger(0);public static void main(String[] args) throws InterruptedException {//线程一Thread thread1 new Thread(() - {for (int i0; i10000;i){increment();}});//线程二Thread thread2 new Thread(() - {for (int i0; i10000;i){increment();}});//执行线程thread1.start();thread2.start();//等待执行完线程1和2thread1.join();thread2.join();System.out.println(查看counter的总数counter.get());}public static void increment() {int currentValue;int newValue;do {//获取counter对象的value值currentValue counter.get();//将counter对象的value值加1newValue currentValue 1;} while (!counter.compareAndSet(currentValue, newValue));}}总结 总的来说ConcurrentHashMap是Java中线程安全的哈希表实现它通过使用锁分段技术来提供高效的并发性能。相比于HashtableConcurrentHashMap在多线程环境下能够更好地支持高并发读写操作。 使用ConcurrentHashMap可以在多线程环境下安全地进行数据操作而无需手动加锁。它通过将整个数据结构分成多个段来实现并发性能的提升不同的线程可以同时访问不同的段从而减少了线程之间的竞争。 ConcurrentHashMap的设计考虑了线程安全和性能的平衡。它提供了一些有用的方法如putIfAbsent()、replace()等可以方便地进行原子性的操作。此外ConcurrentHashMap还支持遍历操作可以通过迭代器安全地遍历其中的元素。 需要注意的是虽然ConcurrentHashMap是线程安全的但并不保证对于单个操作的原子性。如果需要进行复合操作仍然需要额外的同步措施。 总的来说ConcurrentHashMap是一个强大的线程安全的哈希表实现适用于多线程环境下的高并发读写操作。它提供了高效的并发性能可以提升系统的吞吐量和响应速度。
http://www.hkea.cn/news/14263154/

相关文章:

  • 哪里可以制作网站wordpress安装包下载
  • 怎么做网站维护宣传中企动力是干什么的
  • wordpress取第一张图片下载班级优化大师
  • 泰安网站建设哪家不错国际重大新闻事件2023
  • 网站页面建设规划文案我是做网站的
  • 宁波手机网站开发公司番禺网站开发哪家专业
  • 免费金融发布网站模板下载企业邮箱哪家便宜
  • 十大网站在线观看徐州市铜山新区建设局网站
  • 建设网站需要给钱吗谷歌网站为什么打不开
  • 网站域名过期未续费怎么办什么叫网站外链
  • 浙江联科网站开发一元注册公司流程
  • 不想网站备案如何办算命网站建设开发
  • dedecms 做微网站怎么做淘客推广网站
  • 高端网站制作网站建设广州建网站维护公司
  • 网站设建设表单wordpress怎么使用自己的模板
  • 不会代码 怎么做网站济南网站开发公司
  • 海口制作手机网站vultr 搭建wordpress
  • 惠州开发做商城网站建设哪家好如何用dw做网站地图
  • dede本地搭建好网站后台密码和用户名是什么wordpress 内容采集
  • 深圳建网站服务wordpress文章首字下沉
  • 化妆品网站建设原因来宾市住房和城乡建设局网站
  • 影视传媒广告公司网站模板手机平台网站系统
  • 建设电子商务网站市场分析网站建设实训个人总结3000字
  • 室内设计案例去什么网站建立一个公司
  • 腾讯企业邮箱电脑版温州网站优化推广方案
  • 网站建设应该列入什么科目wordpress 显示全部分类
  • wap卖料建站系统六安政务中心网站
  • 网站开发保存学习进度的方案网站的根目录怎么找
  • 网站建设 中企动力福州阀门网站开发从入门到精通
  • 汕头教育学会网站建设威海建设信息网站