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

date: 2017-05-05 23:37:20

tags: ['多线程','并发']

categories: 读书笔记

---

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

1.1线程之间如何通信。

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

最新文章

  1. C# 导入Excel到DataSet中
  2. Android RelativeLayout 实现左右中布局
  3. IL学习资料
  4. Java并发包中常用类小结(一)
  5. Heritage from father
  6. 配置pyqt5环境 for python3.4 on Linux Mint 17.1
  7. Nginx服务器中的Socket切分,需要的朋友可以参考下
  8. Java 常见异常种类
  9. Spring Cloud Turbine微服务集群实时监控
  10. python的wrapt模块实现装饰器
  11. 代码的重构(Refactor-Extract)
  12. [centos][ntp][administrator] chrony ntp
  13. WordConuts
  14. [PHP]自定义session存储机制的两种方案
  15. c++之enum的好处与 define 的区别
  16. struct和union,enum分析
  17. MVC的多页面后台管理系统
  18. Python3.x:关于urllib中urlopen报错问题的解决方案
  19. 20170707xlVBA多区域拆分多表保持行高列宽
  20. 【UOJ Round #8】

热门文章

  1. tomcat 发布简单的html网站
  2. 关于 for 循环与 循环嵌套
  3. Nginx概述和安装(1)
  4. CentOS上安装RabbitMQ
  5. 进行app性能和安全性测试的重要性
  6. CSS基础之盒子模型及浮动布局
  7. 细说log4j
  8. 重新学习一次javascript;
  9. Java入门篇(四)——数组
  10. [学习OpenCV攻略][003[初试牛刀——显示图片]