zoukankan      html  css  js  c++  java
  • Java并发编程的艺术读书笔记(2)-并发编程模型


    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
    水王续
    输入法之体验
    返回一个二维整数数组中最大联通子数组的和
  • 原文地址:https://www.cnblogs.com/reason-cai/p/6818180.html
Copyright © 2011-2022 走看看