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

JAVA并发编程基础知识.pdfVIP

  1. 1、本文档共34页,可阅读全部内容。
  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内存模型

.原⼦性(Atomicity)

.可⻅性(Visibility)

.有序性(Ordering)

..指令重排

..Happen-Before规则

⼆、多线程基本操作

.线程状态

.stop(被废弃)

.interruptisInterruptinterrupted

.waitnotify

.suspendresume(被废弃)

.joinyield

三、volatile

四、ThreadGroup

五、Daemon

六、synchronized

七、锁的优化策略

⼋、⽆锁

.CAS

.AtomicInteger

.Unsafe

.AtomicReference

.AtomicStampedReference

.AtomicIntegerArray

.AtomicIntegerFieldUpdater

九、ThreadLocal

1

⼀、Java内存模型

●Java内存模型,即:JMM。当程序执⾏并⾏操作时,如果对数据的访问和操作不加以控制,那么必

然会对程序的正确性造成破坏。因此,我们需要在深⼊了解并⾏机制的前提下,再定义⼀种规则,

来保证多个线程间可以有效地、正确地协同⼯作。⽽JMM就是为此⽽⽣的。

●JMM的关键技术点都是围绕着多线程的原⼦性、可⻅性和有序性来创建的。所以,下⾯我们来⼀⼀

介绍这三种特性。

1.1原⼦性(Atomicity)

●原⼦性

是指⼀个操作是不可中断的。即使是在多个线程⼀起执⾏的时候,⼀个操作⼀旦开始,就不会被其他

线程所⼲扰。

●⽐如⼀个inta,线程A对其赋值1,线程B对其赋值2,⽆论什么情况,a的值要么是1,要么是2;不

会被线程A或线程B⼲扰。但是,如果是在32位操作系统中,操作64位的long类型数据的时候,

就⽆法保证原⼦性了。因为赋值操作需要执⾏2次32位的操作,⽽在多线程的情况下,可能会出

现“意想不到”的最终结果。如下所示:

2

【解释】

由于在32位操作系统中,对long赋值是要执⾏两步的,所以,在并发赋值时,就有可能最终long的赋

值结果“让⼈很意外”,即:不是111L、-999L、333L和-444L中的任意⼀个。(例如:long的⾼32位

由线程A赋值了,低32位由线程B赋值了)

1.2可⻅性(Visibility)

●可⻅性

3

是指当⼀个线程修改了某⼀个共享变量的值,其他线程是否能够⽴即知道这个修改。

●如果在CPU_A和CPU_B上各运⾏了⼀个线程,它们共享变量t,由于编译器优化或者硬件优化的缘

故,在CPU_A上的线程将变量t进⾏了优化,将其缓存在cache中或者寄存器⾥。这种情况下,如果

在CPU_B上的某个线程修改了变量t的实际值,那么CPU_A上的线程可能并⽆法意识到这个改动,

依然会读取cache中或者寄存器⾥的数据。

●可⻅性问题是⼀个综合性问题。除了上述提到的缓存优化或者硬件优化(有些内存读写可能不会⽴

即触发,⽽会先进⼊⼀个硬件队列等待)会导致可⻅性问题外,指令重排以及编译器的优化,

都有可能导致⼀个线程的修改不会⽴即被其他线程察觉。

1.3有序性(Ordering)

●因为指令流⽔线的存在,CPU才能真正⾼效的执⾏。但是,流⽔线总是害怕被中断的。流⽔线满载

时,性能确实相当不错,但是⼀旦中断,所有的硬件设备

文档评论(0)

135****3697 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档