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

新闻列表做的最好的网站国内crm软件排名

新闻列表做的最好的网站,国内crm软件排名,网站设计论坛,合肥网站建设q479185700強文章目录 前言多线程环境使用 ArrayList多线程环境使用队列多线程环境使用哈希表1. HashTable2. ConcurrentHashMap 前言 前面我们学习了很多的Java集合类#xff0c;像什么ArrayList、Queue、HashTable、HashMap等等一些常用的集合类#xff0c;之前使用这些都是在单线程中… 文章目录 前言多线程环境使用 ArrayList多线程环境使用队列多线程环境使用哈希表1. HashTable2. ConcurrentHashMap 前言 前面我们学习了很多的Java集合类像什么ArrayList、Queue、HashTable、HashMap等等一些常用的集合类之前使用这些都是在单线程中使用的而如今我们学习了多线程之后就要考虑这些集合在多线程中使用是否会发生一些线程不安全的问题。 原来的集合类大部分都是线程不安全的除了Vector、Stack、HashTable是线程安全的但是这些都不建议使用了因为Java官方已经将这些集合类标记了随时都有可能被删除其他的集合类就是线程不安全的。 多线程环境使用 ArrayList 因为 ArrayList 在多线程环境下可能涉及到同时读和写的操作从而导致线程不安全。为了解决在使用 ArrayList 线程不安全的问题有以下几种解决方法。 自己使用同步机制使用 synchronized 或者 ReentrantLock 加锁等Collections.synchronizedList(new ArrayList); 使用这个集合类就是在相关方法前面进行 synchronized 加锁 synchronizedList 是标准库提供的一个基于 synchronized 进行线程同步的 List. synchronizedList 的关键操作上都带有 synchronized 使用 CopyOnWriteArrayList CopyOnWriteArrayList 即写时复制容器当进行写操作的时候不是直接添加进容器中而是先Copy复制出一个容器将新元素添加进新容器中。当添加完成之后就将原容器的引用指向新容器。这样就可以保证在写的时候不需要进行加锁也可以读并且读的数据是正确的。 CopyOnWriteArrayList 容器的优缺点 优点 线程安全CopyOnWriteArrayList 是线程安全的你可以在多线程环境中无需额外的同步或锁定就能使用它。读操作无需锁定由于它使用了写时复制策略所以读取操作例如 get 和 iterator可以在没有锁定的情况下进行这使得它非常适合读多写少的场景。避免阻塞CopyOnWriteArrayList 使用了一种称为 “乐观锁” 的策略这意味着它不会在执行修改操作时阻塞读取操作。 缺点 写操作开销大每次修改操作都会复制整个底层数组这在数组较大时可能会导致显著的性能开销。因此CopyOnWriteArrayList 不适合写操作频繁的场景。内存消耗大由于每次写操作都会复制整个数组这可能会导致大量的内存消耗。迭代器一致性CopyOnWriteArrayList 的迭代器是弱一致性的weakly consistent。这意味着如果你在迭代过程中修改了列表除非是通过迭代器自己的 remove 方法那么迭代器可能不会反映这些修改。 总的来说CopyOnWriteArrayList 是一种非常有用的工具但是你应该清楚它的适用场景读多写少且数据大小适中。如果你在一个写操作频繁或者数据非常大的场景中使用它可能会遇到性能问题。 多线程环境使用队列 因为队列先进先出的特性所以主要的线程安全问题就是当队列为空的时候读取和队列为满的时候插入为了解决队列在多线程中会出现的问题主要就是使用了阻塞队列的方法使队列为空时读取数据和队列为满时的插入数据操作进入阻塞等待状态。 ArrayBlockingQueue 基于数组实现的阻塞队列LinkedBlockingQueue 基于链表实现的阻塞队列PriorityBlockingQueue 基于堆实现的带优先级的阻塞队列TransferQueue 最多只包含一个元素的阻塞队列 多线程环境使用哈希表 在多线程环境下使用哈希表可以使用 HashTableConcurrentHashMap 1. HashTable HashTable 只是给一些关键方法加上了 synchronized 锁是直接加在方法上的也就相当于给 HashTable 对象加锁。 对整个对象加锁就意味着 如果多线程访问同一个 Hashtable 就会直接造成锁冲突.size 属性也是通过 synchronized 来控制同步, 也是比较慢的.一旦触发扩容, 就由该线程完成整个扩容过程. 这个过程会涉及到大量的元素拷贝, 效率会非常低. 但是实际上并不是多个线程只要访问同一个 HashTable 对象需要进行加锁而是只有当两个线程访问到同一个链表的时候才需要进行加锁并且哈希寻址的时候两个线程同时找到同一个链表的几率是比较小的所以没必要将整个哈希表都进行加锁。 2. ConcurrentHashMap ConcurrentHashMap 在 HashTable 的基础上做出了一系列的优化。 ConcurrentHashMap 将 HashTable 的一个大锁转换为了一个一个加在锁桶的小锁大大降低了锁冲突的现象。 充分利用 CAS 特性避免了一些不必要加锁的情况。比如更改哈希表中的元素个数 size 时候就使用 CAS 原子操作不进行加锁。ConcurrentHashMap 对读操作没有进行加锁也就是说当多个线程同时进行读和读操作、读和写操作的时候都不会出现锁竞争的现象。 但是如果不对读操作进行加锁的话会不会发生读到了一个只修改了一半的数据呢 答 其实是不会的因为 ConcurrentHashMap 在底层编码的时候比较谨慎的处理了一些细节。在修改操作的时候会避免使用和- -的这些非原子性的操作而是使用 这种原子性的操作。有了这些操作就使得读取到的数据要么是修改之前的数据要么是修改值时候的数据不会出现读取到的数据是只修改了一半的数据。 优化了扩容方式: 化整为零。通过这个优化就避免了短时间内因哈希表中元素过多进行扩容的时候需要改变的元素过多而造成计算机需要承担的负担过重而导致阻塞的情况。 发现需要扩容的线程, 只需要创建一个新的数组, 同时只搬几个元素过去.扩容期间, 新老数组同时存在.后续每个来操作 ConcurrentHashMap 的线程, 都会参与搬家的过程. 每个操作负责搬运一小部分元素.搬完最后一个元素再把老数组删掉.这个期间, 插入只往新数组加.这个期间, 查找需要同时查新数组和老数组
http://www.pierceye.com/news/125357/

相关文章:

  • 成都市建设厅网站查询十九冶成都建设有限公司网站
  • 建电商网站要多少钱建设绿色食品网站
  • 建行个人网上登录入口优化网站结构一般包括
  • 好看的网站页面WordPress知更鸟主题怎样安装
  • 如何查网站是否备案免费建网站代码
  • 曲沃网站开发新注册的公司怎么做网站
  • 企业网站无线端怎么做塑胶科技东莞网站建设
  • 图片发到哪些网站 seo阜沙网站建设
  • 企业开源建站系统大连百度首页优化
  • 通辽做网站有没有智慧软文发稿平台
  • 网站别人做的我自己怎么续费福州网站建站公司
  • 青岛高端网站开发wordpress修改logo地址
  • 做网站实名认证有什么用青岛网站建设运营
  • 大数据分析网站做汽车保养的网站上
  • 网站开发费用一般是多少怎么建设宣传网站
  • 做网站的背景怎么做ps免费模板网站
  • 为什么要建设应急管理网站sketch做网站
  • 做的网站在百度上搜不出来的宁波关键词优化平台
  • 哪里有手机网站建设公司有道网站收录提交入口
  • 赣州网站建设较好的公司贵州网站建设hsyunso
  • 网站建设和管理是教什么科目鹤壁网站建设鹤壁
  • 网站域名和邮箱域名解析国外网站国内做二维码
  • 万万州州微微网站网站建建设设福州建设网站效果图
  • 长安网站建设详细教程鸿科经纬教网店运营推广
  • 微信营销模式有seo短视频网页入口引流推广
  • 做商城网站简单吗长春网站建设服务
  • 工厂弄个网站做外贸如何app开发报价公司
  • 网销网站建设流程如何创建网站挣钱
  • 韶关网站制作手机推广app
  • Linux做视频网站网速均衡网页编辑实践报告