摘要: 本文转自:http://www.infoq.com/cn/articles/java-memory-model-6 与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问。对于final域,编译器和处理器要遵守两个重排序规则: 下面,我们通过一些示例性的代码来分别说明这两 阅读全文
posted @ 2018-01-21 17:12 陈旭沅 阅读(870) 评论(1) 推荐(0) 编辑
摘要: 本文转自:http://www.infoq.com/cn/articles/java-memory-model-5 锁的释放-获取建立的happens before 关系 锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。下面是锁释放 阅读全文
posted @ 2018-01-21 17:08 陈旭沅 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 本文转自:http://www.infoq.com/cn/articles/java-memory-model-4 volatile的特性 当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同 阅读全文
posted @ 2018-01-21 17:03 陈旭沅 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 本文转自:http://www.infoq.com/cn/articles/java-memory-model-3 数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下: 在一个线程中写一个变量, 在另一个线程读同一个变量, 而且写和读没有通过同步 阅读全文
posted @ 2018-01-21 16:52 陈旭沅 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 本文转自:http://www.infoq.com/cn/articles/java-memory-model-2 数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型: 上面三种情况,只要重排序两个操作的执行顺序,程序的执 阅读全文
posted @ 2018-01-21 16:45 陈旭沅 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 本文转自http://www.infoq.com/cn/articles/java-memory-model-1 并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中, 阅读全文
posted @ 2018-01-21 16:18 陈旭沅 阅读(187) 评论(0) 推荐(0) 编辑