- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Concurrent In Java 6 分享
Concurrent In Java?这一系列只是对JUC各个部分做了说明和介绍,没人深入原理!concurrent并发包,让你易于编写并发程序。并发下我们经常需要使用的基础设施和解决的问题有ThreadPool、Lock、管道、集合点、线程之间等待和唤醒、线程间数据传输、共享资源访问控制、并发线程之间的相互等待,等待。?concurrent提供的工具能够解决绝大部分的场景,还能提高程序吞吐量。?现代的服务器多采用多核CPU,从而不同线程之间有可能真正地在同时运行而不是cpu时间切片。在处理大计算量的程序上要尽可能利用CPU多核特性,提高系统吞吐量。?并发编程主要面临三个问题:1.如何让多个线程同时为同一个任务工作(并发编程设计)2.多个线程之间对共享资源的争用。3.多个线程之间如何相互合作、传递数据。?1. concurrent包提供的集合concurrent包直接提供了标准集合的一些实现,在下面做简单介绍。在大部分情况下可以使用它们提供高并发环境下对集合访问的吞吐量。?1.1 ConcurrentHashMapMap的一个并发实现。在多线程环境下,它具有很高的吞吐量和具备可靠的数据一致性。它支持并发读和一定程度的并发修改(默认16个并发,可以通过构造函数修改)。?HashMap的实现是非线程安全的,高并发下会get方法常会死锁,有的时候会表现为CPU居高不下。? ?public V get(Object key) {? ? ? ?if (key == null)? ? ? ? ? ?return getForNullKey();? ? ? ?int hash = hash(key.hashCode());? ? ? ?for (EntryK,V e = table[indexFor(hash, table.length)];? ? ? ? ? ? e != null;? ? ? ? ? ? e = e.next) {? ? ? ? ? ?Object k;? ? ? ? ? ?if (e.hash == hash ((k = e.key) == key || key.equals(k)))? ? ? ? ? ? ? ?return e.value;? ? ? ?}? ? ? ?return null;? ?}在get操作里面for循环取对象的操作,由于高并发同时读写,for循环的结果变得不可预知,所以有可能一直循环。所以高并发环境下尽量不要直接使用HashMap,对系统造成的影响很难排除。??和Collections.synchronizedMap(new HashMap(...))相比,外ConcurrentHashMap在高并发的环境下有着更优秀的吞吐量。因为ConcurrentHashMap可以支持写并发,基本原理是内部分段,分段的数量决定着并发程度。通过concurrencyLevel参数可以设置。如果你能预期并发数量那么设置该参数可以获取更优吞吐量。?另外为ConcurrentHashMap还实现了:?V putIfAbsent(K key, V value);boolean remove(Object key, Object value);boolean replace(K key, V oldValue, V newValue);V replace(K key, V value);?这四个一致性的操作方法。?1.2?BlockingQueueBlockingQueue定义了一个接口,继承了Queue接口。Queue是一种数据结构,意思是它的项以先入先出(FIFO)顺序存储。?BlockingQueue为我们提供了一些多线程阻塞语义的方法,新增和重定义了一些方法插入:??抛出异常返回的布尔值阻塞超时插入add(e)offer(e)put(e)offer(e, time, unit)移除remove()poll()take()poll(time, unit)检查element()peek()???BlockingQueue是线程安全的,非常适合多个生产者和多个消费者线程之间传递数据。?形象地理解,BlockingQueue好比有很多格子的传输带系统,不过当你(生产者)调用put方法的时候,如果有空闲的格子那么放入物体后立刻返回,如果没有空闲格子那么一直处于等待状态。add方法意味着如果没有空闲格子系统就会报警,然后如果处理该报警则按照你的意愿。offer方法优先于add方法,它通过返回true 或 flase来告诉你是否放入成功。offer超时方法,如果不空闲的情况下,尝试等待一段时间。?BlockingQueue有很多实现ArrayBlockingQueue,?DelayQueue,?LinkedBlocki
您可能关注的文档
最近下载
- 《劳动教育》教学课件PPT.pptx VIP
- TZS 0680—2025《医疗机构实验室生物安全管理组织架构规范》(水印版).pdf VIP
- 电信研发工程师L1认证培训考试复习题库资料(含答案).pdf
- 2024邮政集团湖北分公司社招笔试备考试题及答案解析.docx VIP
- 智慧教育行业解决方案(PPT).pptx VIP
- 《AIGC高效办公:Excel数据处理与分析》课件 第8章 客户数据分析.pptx VIP
- 企业合同法律风险及防范培训.pptx VIP
- 天达登机桥维保手册.pdf
- 漏扫RAS3000-山石网科远程安全评估系统用户手册V5.5-1.8.4-4.pdf VIP
- 2024年第九届“学宪法、讲宪法”知识竞赛题库及答案(中小学组).pdf VIP
文档评论(0)