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

免费搭建商城网站包装设计需要学什么软件

免费搭建商城网站,包装设计需要学什么软件,微信小程序制作团队,网站建设售后服务安全维护线程安全集合类 前言一、多线程使用线性表二、多线程使用栈和队列三、多线程下使用哈希表 前言 在数据结构中#xff0c;我们学习过 Java 的内置集合#xff0c;但是我们知道#xff0c;我们学过的大多数集合类都是线程不安全的#xff0c;少数如 Vector#xff0c;Stack… 线程安全集合类 前言一、多线程使用线性表二、多线程使用栈和队列三、多线程下使用哈希表 前言 在数据结构中我们学习过 Java 的内置集合但是我们知道我们学过的大多数集合类都是线程不安全的少数如 VectorStackHashTable 是线程安全的但这些都是一些比较“粗糙”的类在所有方法上加了 synchronized 锁一般不建议使用。 那么当我们想要在多线程下使用集合类该怎么处理呢 一、多线程使用线性表 方式1手动给会出现线程安全问题的逻辑加锁。 例如多个线程修改 ArrayList此时可能出现问题就可以给修改操作进行加锁。 方式2使用 Collections.synchronizedList(); 封装 将想要使用的线性表用上述方法封装起来相当于给集合里的关键方法加上了锁。 方式3使用使用 CopyOnWriteArrayList CopyOnWriteArrayList 原理 CopyOnWriteArrayList 又称写时复制的容器。当我们往一个容器添加元素的时候不直接往当前容器添加而是先将当前容器进行Copy复制出一个新的容器然后新的容器里添加元素添加完元素之后再将原容器的引用指向新的容器。 这样做的好处是我们可以对 CopyOnWriteArrayList 容器进行并发的读而不需要加锁只有在写时加锁因为当前容器不会添加任何元素。 所以说 CopyOnWriteArrayList 容器采用的是一种读写分离的思想读和写不同的容器。 优点 适用于读多写少的场景下。在读多写少的场景下性能很高不需要加锁竞争. 缺点 在修改时需要重新拷贝容器占用内存较多。新写的数据不能被第一时间读取到即可能出现“脏读”问题。 二、多线程使用栈和队列 多线程使用栈和队列我们可以直接使用 Java 标准库提供的阻塞队列因为带有阻塞功能这些集合在多线程下是线程安全的 ArrayBlockingQueue 基于数组实现的阻塞队列LinkedBlockingQueue 基于链表实现的阻塞队列PriorityBlockingQueue 基于堆实现的带优先级的阻塞队列TransferQueue 最多只包含一个元素的阻塞队列 三、多线程下使用哈希表 哈希表也是我们经常会使用到的集合类而标准库提供了 3 种哈希表3 种哈希表之间的区别也是一个非常重要的知识点下面就花点时间对比一下 HashMap、HashTable、ConcurrentHashMap。 1HashMap HashMap 不必多说这就是一个在单线程下使用的哈希表本身是不安全的。 2HashTable HashTable 是对其中的公共方法加上了 synchronized 锁其实就想当于给整个哈希表上了锁。如果多个线程访问同一个 HashTable 就和产生锁竞争而且一旦触发扩容就由该线程完成整个扩容过程效率会非常低。我们可以简单画个图理解一下 3ConcurrentHashMap ConcurrentHashMap 在 HashTable 的基础上做了一些优化 Java1.7 中主要的优化手段是 使用的是分段锁技术 简单的说就是把若干个哈希桶分成一个段 (Segment)针对每个段分别加锁。目的也是为了降低锁竞争的概率。当两个线程访问的数据恰好在同一个段上的时候才触发锁竞争。 Java1.8 中的优化 优化1读写操作最关键的优化 在Java1.8中取消了分段锁直接给每个哈希桶/每个链表分配了一个锁就是以每个链表的头结点对象作为锁对象。在读操作上取消了加锁使用了 volatile 保证从内存读取结果。同样我们画个图理解 举个例子 假如现在有两个线程插入两个元素。线程 1 插入元素对应下标为 1 的链表上线程 2 插入的元素对应在下标为 2 的链表上。此时就相当于是两个线程修改不同的变量显然是没有线程安全问题的。ConcurrentHashMap每次插入操作只是针对对应的链表加锁操作不同的链表就是针对不同的锁加锁不会产生锁竞争。因此这就导致大部分加锁实际上是没有所冲突的而这里的加锁操作开销也就微乎其微了。如果此时使用的是 HashTable由于是对整个哈希表加锁这两个插入依然会对同一个 this 产生锁竞争产生阻塞等待。 优化2重复利用CAS特性 例如更新、获取元素个数直接使用 CAS 完成不必加锁。 优化3优化扩容机制化整为零 我们知道哈希表中有一个参数叫做“负载因子”。如果元素过多导致负载因子过大就要考虑扩容。 扩容就需要重新申请内存空间把元素从旧的哈希表上删掉插入到新的哈希表上。但是如果哈希表元素非常多搬运一次就会导致这一次put操作非常卡顿。 而对于 ConcurrentHashMap 的扩容策略——化整为零。发现需要扩容的线程只需要创建一个新的数组更大的内存空间同时只搬几个元素过去。扩容期间新老数组同时存在。 后续每个来操作 ConcurrentHashMap 的线程都会参与搬家的过程。每个操作负责搬运一小部分元素搬完最后一个元素再把老数组删掉。在此期间插入只往新数组加查找需要同时查新数组和老数组。 优化4底层实现 将原来 数组 链表 的实现方式改进成 数组 链表 / 红黑树 的方式。当链表较长的时候(大于等于8 个元素)就转换成红黑树。 使用 HashMap、HashTable、ConcurrentHashMap 冷知识 HashMapkey 允许为 nullHashTablekey 不允许为 nullConcurrentHashMapkey 不允许为 null
http://wiki.neutronadmin.com/news/89068/

相关文章:

  • 网站开发语言排名网站建设费属于什么税目
  • 公司做网站要有服务器腾讯网站建设分析
  • 网站被host重定向做电力公司网站
  • 网络建站优化科技企业大黄页
  • 昆明建设招聘信息网站专业的基础微网站开发
  • 做网站用小型机或服务器个人博客网站搭建模板
  • 企业门户网站建设方案文档濮阳网络电视台直播
  • 怎么给网站加图标西安小程序
  • 网站开发设计项目书element ui做门户网站
  • 运用django做网站企业名称
  • wordpress修改永久链接后无法访问中山市seo推广点击软件
  • 建筑培训网站有哪些内容营销的形式有哪些
  • 免费二级网站残联网站建设
  • 手机版网站案例2024年新冠会消失吗
  • 做网站 参考文献最简单的营销方案
  • wordpress主题的网站模板wordpress修改地址
  • 网站流量钱是谁给的上传 wordpress
  • 建网站岑溪哪家强?开发公司采购管理制度
  • 网站所属网络怎么网站开发
  • 建设派网站旅游海外网站建设
  • 怎样下载模板做网站网上写作如何投稿赚钱
  • 如何建立网站和网页建中英文网站
  • 国外网站服务器做网站赚钱什么类型
  • 求职网站建设横沥做网站
  • 监控摄像头做直播网站网站跳出率多少正常
  • 珠海建设工程信息网站设计吧
  • 攸县住房和城乡规划建设局网站什么是企业网站pv
  • 网站建设石家庄快优网站建设服务优势
  • 攀枝花市建设银行网站小型教育网站的开发与建设论文
  • 怎么做视频解析的网站2023年火爆的新闻