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

买房咨询平台在线邯郸网站关键字优化

买房咨询平台在线,邯郸网站关键字优化,网站顶部地图代码怎么做的,色盲眼镜文章目录 1. 多线程环境使用ArrayList1.1 自己使用同步机制1.2 Collections.synchronizedList(new ArrayList);1.3 使用 CopyOnWriteArrayList 2. 多线程使用队列3. 多线程环境使用哈希表3.1 HashTable3.2 ConcurrentHashMap3.3 Hashtable和HashMap、ConcurrentHashMap 之间的区…

文章目录

    • 1. 多线程环境使用ArrayList
      • 1.1 自己使用同步机制
      • 1.2 Collections.synchronizedList(new ArrayList);
      • 1.3 使用 CopyOnWriteArrayList
    • 2. 多线程使用队列
    • 3. 多线程环境使用哈希表
      • 3.1 HashTable
      • 3.2 ConcurrentHashMap
      • 3.3 Hashtable和HashMap、ConcurrentHashMap 之间的区别?

学到现在,我们会发现原先学的大多集合类在多线程环境中使用并不是安全的,在并发编程中使用起来会有诸多问题,那么下面我们就要学习新的集合类和并发集合。
PS:Vector, Stack, HashTable, 是线程安全的,但不建议用,这是Java中旧的集合类,它们在性能、可读性、维护性等方面已经不如现在新的集合类和并发集合。

1. 多线程环境使用ArrayList

1.1 自己使用同步机制

自己使用同步机制,就是为ArrayList加锁,我们可以使用synchronized或ReentrantLock。

1.2 Collections.synchronizedList(new ArrayList);

synchronizedList 是标准库提供的一个基于 synchronized 进行线程同步的 List.
synchronizedList 的关键操作上都带有 synchronized,实现线程安全。

1.3 使用 CopyOnWriteArrayList

CopyOnWrite容器即写时复制的容器。
当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。
这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。
所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。
优点
在读多写少的场景下, 性能很高, 不需要加锁竞争。
缺点

  1. 占用内存较多。
  2. 新写的数据不能被第一时间读取到。

2. 多线程使用队列

  1. ArrayBlockingQueue
    基于数组实现的阻塞队列
  2. LinkedBlockingQueue
    基于链表实现的阻塞队列
  3. PriorityBlockingQueue
    基于堆实现的带优先级的阻塞队列
  4. TransferQueue
    最多只包含一个元素的阻塞队列

3. 多线程环境使用哈希表

HashMap本身不是线程安全的。
并发编程中可以使用HashTable和ConcurrentHashMap。

3.1 HashTable

HashTable实现线程安全就是把关键的方法都加上锁,例如get(),put()方法,这个时候当多个线程访问HashTable就会发生锁冲突。
其实就相当于给HashTable对象进行了加锁,这个时候也会造成许多的弊端,例如:

  1. size属性也被加锁,那么多线程同时访问size的速度就会变慢,降低了效率。
  2. 当发生扩容操作时,就由该线程完成整个扩容过程. 这个过程会涉及到大量的元素拷贝, 效率会非常低。

3.2 ConcurrentHashMap

相比HashTable,ConcurrentHashMap就进行了优化,只对写操作进行加锁(锁的不是整个对象,而是‘桶锁’,以每个链表的头节点作为锁,那么,只有多线程同时访问一个桶时才会锁冲突),读并没有加锁(但是使用了volatile,保证内存的可见性)那么多线程读时,效率就会大大提升。
充分利用 CAS 特性:
比如 size 属性通过 CAS 来更新. 避免出现重量级锁的情况。
优化了扩容方式:
化整为零:
发现需要扩容的线程, 只需要创建一个新的数组, 同时只搬几个元素过去,
扩容期间, 新老数组同时存在,后续每个来操作 ConcurrentHashMap 的线程, 都会参与搬家的过程. 每个操作负责搬运一小部分元素, 搬完最后一个元素再把老数组删掉。这个期间, 插入只往新数组加,这个期间, 查找需要同时查新数组和老数组。

3.3 Hashtable和HashMap、ConcurrentHashMap 之间的区别?

HashMap: 线程不安全. key 允许为 null
Hashtable: 线程安全. 使用 synchronized 锁 Hashtable 对象, 效率较低. key 不允许为 null.
ConcurrentHashMap: 线程安全. 使用 synchronized 锁每个链表头结点, 锁冲突概率低, 充分利用CAS 机制. 优化了扩容方式. key 不允许为 null

http://www.yayakq.cn/news/36671/

相关文章:

  • 网站建设要那些收费项广州注册公司费用
  • 网站建设爫金手指科捷15制作网站免费
  • 东莞建设网站的公司简介建网站多少钱一个月
  • 江门建站网站模板什么网站权重高
  • 数据调查的权威网站简单h5
  • 左侧固定导航栏的网站做全屏轮播的网站有哪些
  • 福安网站定制网站开发 理念怎么写
  • 常熟做网站的公司韩国小游戏网站
  • 网站建设的基本内容能24小时挂机的云电脑
  • dns网站建设国内优秀网站案例
  • wp系统网站如何做seo镇江网站制作企业网站
  • 青岛网站建设信息公示东莞网站建设是什么意思
  • 高端品牌网站建设专人一对一服务成都私人做公司网站的
  • 新公司网站建设分录姐姐直播tv
  • 北海网站设计公司住房建设网站柳州
  • 做直播 网站的上市公司智能小区物业管理系统
  • 国外免费网站域名服务器昆明高端seo怎么做
  • 新手做网站教程艺缘网站的建设
  • 企业网站推广总结wordpress自动空格
  • 企业网站一般做哪些栏目儿童网站模板 html
  • 网站开发架设教育门户网站设计欣赏
  • 陕西长城建设工程有限公司网站网站建设的优缺点
  • 中信建设证券官方网站国外 电商网站
  • 厦门网页建站申请比较好杭州科技学校网站建设
  • 如何将自己做的网站推广出去丹阳网站建设咨询
  • 宿州企业网站推广网络营销工作岗位有哪些
  • 一流的网站建设流程山西省住房城乡建设厅门户网站
  • 请问下网站开发怎么弄荣耀官方网站手机商城
  • 北京网站备案速度亚马逊全球开店
  • 重庆智能网站建设设计中国免费图片素材网站