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

外包网站价格专业网站设计公司地址

外包网站价格,专业网站设计公司地址,网站空间有什么用,京东网页设计教程并发容器 什么是并发容器?同步容器:并发容器: 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.hkea.cn/news/14265104/

相关文章:

  • 佛山网站建设模板企业网站设计期末考试
  • 学校网站建设好么电商网站开发教材
  • 云南网站建设是什么网页小游戏免费
  • 怎么样关闭网站长沙app制作公司哪家好
  • 济宁做网站深圳网站品牌建设
  • wordpress如何做站群公司网站建设要求
  • 做公司网站的多少钱wordpress网站迁移后插件
  • asp.net做毕业设计网站盐城网站建设培训班
  • 苏州中国建设银行招聘信息网站景观网站设计网站
  • 策划 网站全网搜索软件
  • 广州网站建设有哪些网站开发实训意义
  • wordpress急速主题网站后台优化
  • 海外网站推广公司精准软件
  • 怎么做网站界面分析连接器零售在什么网站做
  • 赣州人才网暑假工搜索优化
  • 网站如何做备份集成装修全屋定制
  • 网站seo工作内容人工智能网站建设
  • 建设网站需要设备大连巨人网络推广有限公司
  • 中核工建设集团网站网站建设在360属于什么类目
  • 网站界面设计实训报告html网页模板下载html模板免费
  • 上海专业做网站价格如何建设微信网站
  • 备案期间的网站打开app线上推广是什么工作
  • 学校网站建设需要多少钱中小企业网站该怎么做
  • 手机网站和微信网站的区别wordpress 10万篇文章
  • 贵州城市和城乡建设官方网站哪里有创建网站的
  • 西安网站排名分析app我的页面设计
  • 网页制作制作网站wordpress 附件清理
  • 做陶瓷公司网站建工社官网
  • 烟台开发区建设局网站做家电网是什么网站
  • 模板网站源码烟台网站建设技术托管