网站大量收购闲置独家精品文档,联系QQ:2885784924

Java并发编程分享.pptx

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
高嵩 2013-05-02 V0.1 2013-12-12 V0.2 Java并发编程分享 大纲 并发编程概述 JMM(Java Memory Model)概述 可见性 有序性 并发工具 监控与跟踪 为什么要学习并发编程? 充分利用服务器资源 提高服务吞吐量、降低响应时间 爬虫、WebServer、日志分析…… 分布式系统 资源的争用、可伸缩性 多线程的优点 多线程的代价 设计更复杂 资源共享、数据一致性及可见性、调试困难 性能开销 锁、上下文切换 内存开销 贸然进行的性能优化 顺序IO vs 随机IO的例子 问题 所有内存都是共享的吗? 栈上分配的变量是线程安全的 共享内存一定不是线程安全的吗? 不一定,正确的同步 or 不可变对象 or 线程级别的资源 锁的是谁? 试试回答这些问题 还有一题: 大纲 并发编程概述 JMM(Java Memory Model)概述 可见性 有序性 并发工具 监控与跟踪 JMM-抽象模型 Sandy Bridge内存模型 JMM-线程间通讯 大纲 并发编程概述 JMM(Java Memory Model)概述 可见性 有序性 并发工具 监控与跟踪 问题:可见性? 写boolean型对其它线程马上可见吗? VisibilityTest1.java 写引用对其它线程马上可见吗? VisibilityTest2.java 12 安全发布对象 This溢出的例子 VisibilityTest3.java 避免this溢出 VisibilityTest4.java 13 大纲 并发编程概述 JMM(Java Memory Model)概述 可见性 有序性 并发工具 监控与跟踪 问题:有序性? 代码顺序 = 程序执行顺序 ? 单线程 没有数据依赖的话:允许重排序 多线程 整体无序:i++ 线程内重排序:下面的例子 线程间看到的顺序也不一致(可见性导致) 理想情况是什么? 顺序一致性模型 JMM-顺序一致性 理想情况: 正确同步下的真实情况 JMM-重排序 例1:ReorderTest1.java JMM-重排序 例2:ReorderTest2.java/ReorderTest3.java Write Thread: 写-写 Read Thread: 读-读 JMM-重排序 写-写 重排序 JMM-重排序 读-读 重排序 JMM-重排序 不同处理器上的重排序规则 JMM-重排序 难以测试的原因 测试环境和生产环境的JVM版本/硬件配置的不同 不同生产环境的JVM版本/硬件配置的不同 23 大纲 并发编程概述 JMM(Java Memory Model)概述 可见性 有序性 并发工具 监控与跟踪 并发编程带来的问题 不能保证原子性 JMM提供最低安全性,除了long /double 不能保证可见性 各个CPU独享的工作内存 不能保证有序性 并发工具 不可变类 线程独享资源 synchronized(代码块、实例方法、静态方法) volatile(实例变量、静态变量) CAS j.u.c 26 synchronized 锁的原理 任何对象都有一个 monitor (监视器/管程)与之关联,当且一个monitor 被持有后,它将处于锁定状态。 27 synchronized synchronized可以做到: 可重入、互斥性、可见性 synchronized不能做到: 等待超时、可中断、公平性 28 可见性如何保证? JMM happens-before规则 线程中上一个动作及之前的所有写操作在该线程执行下一个动作时对该线程可见 如果线程1解锁了monitor a,接着线程2锁定了a,那么,线程1解锁a之前的写操作都对线程2可见 happends-before有传递性 如何应用happens-before 29 volatile volatile可以做到: 原子性、可见性 volatile不能做到: 复合操作的原子性:TestVolatile.java volatile引用指向对象属性/数组元素的可见性 volatile提供: 与锁一致的语义,并且比锁的开销小 可见性如何保证? happened-before规则: 如果线程1写入了volatile变量v,接着线程2读取了v,那么,线程1写入v及之前的写操作都对线程2可见 改造VisibilityTest2.java/ReorderTest3.java 31 Compare And Swap 32 AtomicInteger: public final int getAndAdd(int delta) { for (;;) { int current = get(); int next = curre

文档评论(0)

shaoye348 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档