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

外包网站价格黑马培训是正规学校吗

外包网站价格,黑马培训是正规学校吗,域名注册时间查询,godaddy托管 wordpress并发容器 什么是并发容器?同步容器:并发容器: ConcurrentHashMap结构图JDK1.7结构图JDK1.8结构图 CopyOnWriteArrayList实现原理 并发队列阻塞队列ArrayBlockingQueue 转自极客时间 什么是并发容器? 在JUC包中#xff0c;有一大部分是关于并发容器的#xff0c;如Concurr… 并发容器 什么是并发容器?同步容器:并发容器: ConcurrentHashMap结构图JDK1.7结构图JDK1.8结构图 CopyOnWriteArrayList实现原理 并发队列阻塞队列ArrayBlockingQueue 转自极客时间 什么是并发容器? 在JUC包中有一大部分是关于并发容器的如ConcurrentHashMapConcurrentSkipListMap CopyOnWriteArrayList及阻塞队列。这里将介绍使用频率、面试中出现频繁的最高的 ConcurrentHashMap和阻塞队列。 注意:这里说到的容器概念相当于我们理解中的集合的概念。 同步容器: Java中的集合主要分为四大类:List、Map、Set和Queue但是并不是所有集合都是线程安全的。比 如我们经常使用的ArrayListHashMapHashSet就不是线程安全的。 早期的JDK1.0中的就提供了线程安全的集合包括VectorStack和Hashtable。此外还有在JDK1.2中增 加的Collections中内部SynchronizedXxx类它们也是线程安全的集合可以由对应 Collections.synchronizedXxx工厂方法创建。这些类实现线程安全的方式都是一样的:都是基于 synchronized这个同步关键字实现的对每个公有方法都进行了同步保证每次只有一个线程能访问集 合所以它们被称为线程安全的集合(同步容器)。 并发容器: 在JDK1.5之前JDK提供的线程安全的类都是同步集合容器。同步容器都是线程安全的但是所有线程 对容器只能串行访问性能很差。在JDK1.5之后引入的JUC并发包提供的更多类型的并发容器在性 能上做了很多改进优化可以用来替代同步容器。它们都是针对多线程并发访问来进行设计的我们称 它们为并发容器。 并发容器依然可以归属到我们提到的四大类:List、Map、Set 和 Queue。 这里我总结了一下它们特性和使用场景: List容器: Vector:使用synchronized同步锁数据具有强一致性。适合于对数据有强一致性要求的场 景但性能较差。 CopyOnWriteArrayList:底层使用数组存储数据使用复制副本实现有锁写操作不能保 证强一致性。适合于读多写少允许读写数据短暂不一致的高并发场景。Map容器 Hashtable:使用synchronized同步锁数据具有强一致性。适合于对数据有强一致性要求的 场景但性能较差。 ConcurrentHashMap:基于数组链表红黑树实现写操作时通过synchronized同步锁将 HashEntry作为锁的粒度支持一定程度的并发写具有弱一致性。适合于存储数据量较小读 多写少且不要求强一致性的高并发场景。 ConcurrentSkipListMap:基于跳表实现的有序Map使用CAS实现无锁化读写具有弱一致 性。适合于存储数据量大读写都比较频繁对数据不要求强一致性的高并发场景。Set容器 CopyOnWriteArraySet:底层使用数组存储数据使用复制副本实现有锁写操作不能保证 强一致性。适合于读多写少允许读写数据短暂不一致的场景。 ConcurrentSkipListSet:基于跳表实现的有序Set使用CAS实现无锁化读写具有弱一致 性。适合于存储数据量大读写都比较频繁对数据不要求强一致性的高并发场景。 ConcurrentHashMap 结构图 JDK1.7结构图 Java7中的ConcurrentHashMap最外层是多个segment每个segment的底层数据结构与HashMap类 似仍然是数组和链表组成。 每个segment独立上ReentrantLock锁每个segment之间互不影响提高并发效率。 默认有16个segment最多可以同时支持16个线程并发写(操作分别分布在不同的Segment上)。这个 默认值可以在初始化时设置但一旦初始化以后就不可以再扩容了。 JDK1.8结构图 ConcurrentHashMap是一个存储 key/value 对的容器并且是线程安全的。 改进一: 取消segments字段直接采用transient volatile HashEntryK,V[] table保存数据采用 table数组元素作为锁从而实现了对每一行数据进行加锁进一步减少并发冲突的概率。 改进二: 将原先table数组单向链表的数据结构变更为table数组单向链表红黑树的结构。查询 更快 CopyOnWriteArrayList 实现原理 CopyOnWrite 思想:是平时查询的时候都不需要加锁随便访问只有在更新的时候才会从原来的 数据复制一个副本出来然后修改这个副本最后把原数据替换成当前的副本。修改操作的同时读操 作不会被阻塞而是继续读取旧的数据。这点要跟读写锁区分一下。 public class Demo15CopyOnWriteArrayList {public static void main(String[] args) {//1、初始化CopyOnWriteArrayListListInteger tempList Arrays.asList(new Integer [] {1,2});CopyOnWriteArrayListInteger copyList new CopyOnWriteArrayList(tempList);ThreadLocal tl new ThreadLocal();//2、模拟多线程对list进行读和写ExecutorService executorService Executors.newFixedThreadPool(10);executorService.execute(new ReadThread(copyList));executorService.execute(new WriteThread(copyList));executorService.execute(new WriteThread(copyList));executorService.execute(new WriteThread(copyList));executorService.execute(new ReadThread(copyList));executorService.execute(new WriteThread(copyList));executorService.execute(new ReadThread(copyList));executorService.execute(new WriteThread(copyList));try {TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(copyList size:copyList.size());executorService.shutdown();} }class ReadThread implements Runnable {private ListInteger list;public ReadThread(ListInteger list) {this.list list;}Overridepublic void run() {System.out.print(size:list.size(),::);for (Integer ele : list) {System.out.print(ele ,);}System.out.println();} }class WriteThread implements Runnable {private ListInteger list;public WriteThread(ListInteger list) {this.list list;}Overridepublic void run() {this.list.add(9);} } 并发队列 阻塞队列 ArrayBlockingQueue 有界可以指定容量 公平:可以指定是否需要保证公平如果想要保证公平则等待最长时间的线程会被优先处理不过会带来一定的性能损耗。 场景:有10个面试者只有1个面试官大厅有3个位子让面试者休息每个人面试时间10秒模拟所有 人面试的场景。 /*** 案例有10个面试者只有1个面试官大厅有3个位子让面试者休息每个人面试时间10秒模拟所有人面试的场景。*/ public class Demo16ArrayBlockingQueue {static ArrayBlockingQueueString queue new ArrayBlockingQueueString(3);public static void main(String[] args) {Interviewer r1 new Interviewer(queue);//面试官Engineers e2 new Engineers(queue);//程序员们new Thread(r1).start();new Thread(e2).start();} }class Interviewer implements Runnable {BlockingQueueString queue;public Interviewer(BlockingQueue queue) {this.queue queue;}Overridepublic void run() {System.out.println(面试官我准备好了可以开始面试);String msg;try {while(!(msg queue.take()).equals(stop)){System.out.println(msg 面试开始...);TimeUnit.SECONDS.sleep(10);//面试10sSystem.out.println(msg 面试-结束...);}System.out.println(所有候选人都结束了);} catch (InterruptedException e) {e.printStackTrace();}} }class Engineers implements Runnable {BlockingQueueString queue;public Engineers(BlockingQueue queue) {this.queue queue;}Overridepublic void run() {for (int i 1; i 10; i) {String candidate 程序员 i;try {queue.put(candidate);System.out.println(candidate 就坐等待面试~);} catch (InterruptedException e) {e.printStackTrace();}}try {queue.put(stop);} catch (InterruptedException e) {e.printStackTrace();}} }
http://www.dnsts.com.cn/news/185116.html

相关文章:

  • 永久免费无代码开发平台网站wordpress文章索引
  • 苏州企业网站建设制作服务手机商城系统总结
  • 如何知道网站流量班级建设网站设计方案
  • 方正网站制作新手用什么框架做网站比较好
  • 安徽省网站建设wordpress 可爱插件
  • 知名排版网站wordpress没有分类模板
  • 运动鞋网站建设目的优化关键词的步骤
  • 凡客做网站公司建设网站的服务费
  • jsp怎么做网站的删除比较出名的wordpress网站
  • 二手车网站设计河北建设集团官方网站
  • 东莞如何建网站费用wordpress默认模版在哪
  • 网站建设陆金手指下拉壹玖北京市建设工程信息网有哪些
  • 网站如何防止攻击营销型网站 案例
  • 聊城seo优化hyein seo是什么牌子
  • 怎样创建个人视频号杭州网站建设方案优化
  • 机床网站建设微信小程序界面设计
  • 苏州网站制作开发公司网站后台管理系统制作
  • 为什么做彩票网站会被提示危险网站空间年费
  • 同城类网站建设多少钱网站建设总体上可划分为两个阶段
  • 济南网站建设安卓版做网站的计划
  • 重庆网站建设哪家专业网页设计软件免费下载
  • 网站制作咨询电话地坪网站建设
  • 江苏建安建设有限公司网站深圳小程序推广
  • 阜阳建设工程质量监督局网站广州比较好的网站建设公司
  • 福州市闽侯县建设局网站分析网站的优势和不足
  • shopify建站费用seo关键词优化软件排名
  • 现在手机网站用什么做的网站模板登录模块
  • 商业网站和企业网站的区别创意灵感的网站
  • 如何用WordPress建小说站网页设计素材包下载
  • 联通网站服务器交互设计案例100例