Java并发编程的艺术读书笔记(2)-并发编程模型


title: Java并发编程的艺术读书笔记(2)-并发编程模型
date: 2017-05-05 23:37:20
tags: ['多线程','并发']
categories: 读书笔记

1.并发编程模型的两个关键问题

1.1线程之间如何通讯。

通讯是指线程之间以何种机制来交换信息。有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,经过读写内存中的公共状态进行隐式通讯。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须经过发送消息来显示进行通讯。java的并发采用的是共享内存模型。java

1.2线程之间如何同步。

同步是指程序中用于控制不一样线程间操做发生相对顺序的机制。在共享内存并发模型中,同步是显式进行的。程序员必须显式指定某个方法或某段代码须要在线程之间互斥执行。在消息传递的并发模型里,因为消息的发送必须在消息的接收以前,所以同步是隐式进行的。程序员

2.happens-before简介

在JMM中,若是一个操做执行的结果须要对另外一个操做可见,那么这两个操做之间必需要存在happens-before关系。这里提到的两个操做既能够是一个线程以内的,也能够是在不一样线程之间的。两个操做之间具备happens-before关系,并不意味着前一个操做必需要在后一个操做以前执行。happens-before仅仅要求前一个操做(执行的结果)对后一个操做可见,且前一个操做按顺序排在第二个操做以前(the first is visible to and ordered before the second)。编程

2.1程序顺序规则:一个线程中的每一个操做,happens-before于该线程中的任意后续操做。

2.2监视器锁规则:对一个锁的解锁,happens-before于随后对这个锁的加锁。

2.3volatile变量规则:对一个volatile域的写,happens-before于任意后续对这个volatile域的读。

2.4传递性:若是A happens-before B,且B happens-before C,那么A happens-before C。

相关文章
相关标签/搜索