Java多线程分享.pptx

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java多线程基础知识分享 2013.08kaqike主要内容Java内存模型volatile关键字Java线程状态线程安全J2SE API概览1.1 线程问题的产生让计算机并发执行若干个运算任务;一个服务端同时对多个客户端提供服务更充分地利用计算机处理器的性能处理器、高速缓存、主内存之间的交互关系z = x + y; if (z 0) then p = m + n;else p = m - n; 缓存一致性:多处理器系统中,因为共享同一主内存,当多个处理器的运算任务都设计到同一块内存区域时,将可能导致各自的缓存数据不一致的情况,则同步回主内存时需要遵循一些协议。乱序执行优化:为了使得处理器内部的运算单位能尽量被充分利用。要求:原子性、可见性、有序性1.2 Java虚拟机内存模型严谨 VS 宽松 目标是定义程序中各个变量的访问规则。(包括实例字段、静态字段和构成数组的元素,不包括局部变量和方法参数)所有的变量都存储在主内存中(虚拟机内存的一部分)。每条线程都由自己的工作内存,线程的工作内存中保存了该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量。线程之间无法直接访问对方的工作内存中的变量,线程间变量的传递均需要通过主内存来完成。线程、主内存、工作内存三者之间的关系内存间交互协议lock(锁定):作用于主内存的变量它拔一个变量标识为一条线程独占的状态。unlock(解锁):作用于主内存的变量,它把一个处于锁定状态变量释放出来,释放后的变量才可以被其他线程锁定。read(读取):作用于主内的变量,把一个变量的值从主内存传输到线程的工作内存中,以便随后的load动作使用。load(载入):作用于工作内存的变量,把read读取操作从主内存中得到的变量值放入工作内存的变量拷贝中。use(使用):作用于工作内存的变量,把工作内存中一个变量的值传递给java虚拟机执行引擎,每当虚拟机遇到一个需要使用到变量值的字节码指令时将会执行该操作。assign(赋值):作用于工作内存变量,把一个从执行引擎接收到的变量的值赋值给工作变量,每当虚拟机遇到一个给变量赋值的字节码时将会执行该操作。?store(存储):作用于工作内存的变量,把工作内存中一个变量的值传送到主内存中,以便随后的write操作使用。??write(写入):作用于主内存的变量,把store操作从工作内存中得到的变量值放入主内存的变量中。成员变量使用、赋值过程内存交互规则不允许read和load、store和write操作之一单独出现。不允许一个线程丢弃最近的assign操作,变量在工作内存中改变了之后必须把该变化同步回主内存中。不允许一个线程没有发生过任何assign操作把数据从线程的工作内存同步回主内存中。一个新的变量只能在主内存中诞生。一个变量在同一时刻只允许一条线程对其进行lock操作,但可以被同一条线程重复执行多次。如果对一个变量执行lock操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量前,需要重新执行read、load操作。如果一个变量事先没有被lock操作锁定,则不允许对它执行unlock操作。对一个变量执行unlock操作前,必须先把该变量同步回主内存中。2.1 synchronized关键字2.2 volatile关键字 Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。保证此变量对所有线程的可见性。每条线程使用此类型变量前都需要先刷新,执行引擎看不到不一致的情况。 load必须与use同时出现;assign和store必须同时出现。禁止指令重排序优化。普通的变量仅保证在方法执行过程中所有依赖赋值结果的地方都能获取到正确的结果,而不能保证赋值操作的顺序与程序代码中的顺序一致。volatile应用场景有限的一些情形下使用 volatile 变量替代锁,必须满足运算结果并不依赖变量的当前值、或者确保只有单一的线程修改变量的值。变量不需要与其他的状态变量共同参与不变约束。状态标志一次性安全发布(one-time safe publication)独立观察(independent observation)“volatile bean” 模式开销较低的读-写锁策略参考: /developerworks/cn/java/j-jtp06197.htmlJava /developerworks/cn/java/j-jtp06197.html理论与实践/developerworks/cn/java/j-j

文档评论(0)

精品文库 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档