Java并发编程实战 9.0分
读书笔记 第二章 线程安全性
元勰

一些概念

在并发编程中,由于不恰当的执行时序而出现不正确的结果是一种非常重要的现象,它有一个正式的名字:竞态条件。 最常见的竞态条件类型就是“先检查后执行”

竞态条件我的理解是因为两次操作有前后关系,并且这中间存在被其他动作插入的可能,导致最终结果和期望结果不一致。

数据竞争:如果在访问共享的非final类型的变量时,没有采用同步协同,那么就会出现数据竞争。当一个线程写入一个变量而另一个线程接下来读取这个变量时,并且两个线程之间没有使用同步,就可能出现数据竞争。 在java内存模型中,如果代码存在数据竞争,那么这段代码就没有确定的语义。 并非所有的竞态条件都的数据竞争,也并非所有的数据竞争都是竞态条件。但两者都会导致并发程序的失败。

我实在有些分不清这两者之间的差别究竟在哪。需要一些具体的实例拿出来研究才可以。但现在我的理解这两者是一回事吧。

在线程安全性的定义要求中,多个线程之间的操作,无论采用何种执行时序或者交替方式,都能保证不变性条件不被破坏。

线程安全需要保证不管怎么交替还是怎么前后执行,都不会出现在意料之外的结果。就是程序的语义是确定的。所以,这里面,如果获取和更新操作本身都是线程安全的,但中间存在其他的交互(可能被被其他线程修改),则线程也是不安全的。

0
《Java并发编程实战》的全部笔记 72篇
豆瓣
免费下载 iOS / Android 版客户端