Java 并发编程手册.pdfVIP

  1. 1、本文档共78页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
!! 前⾔ 前⾔ ⼤家好,我是楼仔! 为了⽅便⼤家学习,我会把所有的系列⽂章整理成⼿册,今天给⼤家整理的是「 Java 并发编程⼿册」。 这个⼿册是我去年写了,当时是⼀边学习⼀遍整理,肝了我 2 个⽉,⼀共 9 篇! 1-4 章是 Java 内存模型,主要提炼程晓明的《深⼊理解 Java 内存模型》,5 章、6 章、9 章主要提炼 Braian Goetz 的《Java 并发编程实战》,第 7 章是整理的⽹络博客,第 8 章是提炼我司的多线程项⽬,代码可以从 Github 下 载,⾮常有借鉴意义! 这个⼿册,很多知识虽然并⾮原创,但是整理后的内容,都是精华浓缩,⽆论你是⾯试,还是进阶,这些⽂章绝对 不会让你失望! 第 1 章:Java 并发编程基础 主要讲解Java 的并发编程的基础知识,包括原⼦性、可⻅性、有序性,以及内存模型JMM 。 Java 系列说明 从这篇⽂章开始,我就要正式开始学习Java 了,之所以说是从现在开始,是因为前两个⽉⼀直在纠结是否转技术栈 (细⼼的同学可以发现,我之前写的⽂章,其实和Java 并没有什么关系),现在已经想清楚了,既然确定要转Java 技术栈,那就踏踏实实从头开始学吧。 ⽬前的我,可以说是Java ⼩⽩,刚转团队不久,也就接触了2个⽉的Java ,代码没写⼏⾏,既然发现⾃⼰Java 很菜, 那就要列个学习计划,将这块知识好好补补。⽬前给⾃⼰定了⼀年的学习计划,希望能通过⼀年的学习,将Java 的 技能从初阶直接晋级到⾼阶⽔平,可能有同学会问“我学习Java 都⼏年的,都还是中级⽔平,你花⼀年就可以晋级到 ⾼阶?” ,我只想说,我想试试,毕竟⼯作这么⻓时间,也掌握了⼀定的学习⽅法,相信跟着⾃⼰的学习节奏⾛, 应该不会离⽬标太远,今天⽴个Flag,希望⼀年后不会啪啪打脸【捂脸】~~ Java 系列的内容主要包括并发编程、Spring、SpringBoost、SpringCloud、Tomcat 、MyBatis、Dubbo和虚拟 机,然后⼀些经典书籍的读书笔记等,当这些都掌握到⼀定深度后,我想我的Java 技能应该也就差不多了。 最后想说的是,Java 很多系列⽂章,很⼤⼀部分是内容整理,之所以要通过⽂章的形式再写⼀遍,是因为看过的内 容,如果⾃⼰不整理⼀遍,或者不让程序跑跑,很容易遗忘,所以写⽂章其实不是⽬的,主要是重新整理和回顾学 习内容的过程,⼀⽅⾯印象深刻,另⼀⽅⾯,也便于⾃⼰后续查阅。 今天废话有点多,我们就从并发编程开始吧! 并发编程基本概念 原⼦性 ⼀个操作或者多个操作,要么全部执⾏并且执⾏的过程不会被任何因素打断,要么就都不执⾏。 原⼦性是拒绝多线程操作的,不论是多核还是单核,具有原⼦性的量,同⼀时刻只能有⼀个线程来对它进⾏操作。 简⽽⾔之,在整个操作过程中不会被线程调度器中断的操作,都可认为是原⼦性。例如 a=1是原⼦性操作,但是 a++和a +=1就不是原⼦性操作。Java 中的原⼦性操作包括: 基本类型的读取和赋值操作,且赋值必须是值赋给变量,变量之间的相互赋值不是原⼦性操作; 所有引⽤reference的赋值操作; java.concurrent.Atomic.* 包中所有类的⼀切操作。 可⻅性 指当多个线程访问同⼀个变量时,⼀个线程修改了这个变量的值,其他线程能够⽴即看得到修改的值。 在多线程环境下,⼀个线程对共享变量的操作对其他线程是不可⻅的。Java 提供了volatile来保证可⻅性,当⼀个变 量被volatile修饰后,表示着线程本地内存⽆效,当⼀个线程修改共享变量后他会⽴即被更新到主内存中,其他线 程读取共享变量时,会直接从主内存中读取。当然,synchronize和Lock都可以保证可⻅性。synchronized和Lock 能保证同⼀时刻只有⼀个线程获取锁然后执⾏同步代码,并且在释放锁之前会将对变量的修改刷新到主存当中。因 此可以保证可⻅性。 有序性 即程序执⾏的顺序按照代码的先后顺序执⾏。 Java 内存模型中的有序性可以总结为:如果在本线程内观察,所有操作都是有序的;如果在⼀个线程中观察另⼀个 线程,所有操作都是⽆序的。前半句是指“线程内表现为串⾏语义” ,后半句是指“指令重排序”现象和“⼯作内存主主 内存同步延迟”现象。 在Java 内存模型中,为了效率是允许编译器和处理器对指令进⾏重排序,当然重排序不会影响单线程的运⾏结 果,但是对多线程会有影响。Java 提供volatile来保证⼀定的有序性。最著名的例⼦就是单

文档评论(0)

jayjiao + 关注
实名认证
文档贡献者

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

认证主体焦**

1亿VIP精品文档

相关文档

相关课程推荐