深入理解Java内存模型——锁

Posted 让自己行动起来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解Java内存模型——锁相关的知识,希望对你有一定的参考价值。

锁的释放-获取建立的happens before 关系

锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。

下面是锁释放-获取的示例代码:

class MonitorExample {
    int a = 0;

    public synchronized void writer() {  //1
        a++;                             //2
    }                                    //3

    public synchronized void reader() {  //4
        int i = a;                       //5
        ……
    }                                    //6
}

假设线程A执行writer()方法,随后线程B执行reader()方法。根据happens before规则,这个过程包含的happens before 关系可以分为两类:

 
  1. 根据程序次序规则,1 happens before 2, 2 happens before 3; 4 happens before 5, 5 happens before 6。
  2. 根据监视器锁规则,3 happens before 4。
  3. 根据happens before 的传递性,2 happens before 5。

上述happens before 关系的图形化表现形式如下:

技术分享

在上图中,每一个箭头链接的两个节点,代表了一个happens before 关系。黑色箭头表示程序顺序规则;橙色箭头表示监视器锁规则;蓝色箭头表示组合这些规则后提供的happens before保证。

转自:http://www.infoq.com/cn/articles/java-memory-model-5&

以上是关于深入理解Java内存模型——锁的主要内容,如果未能解决你的问题,请参考以下文章

深入理解Java内存模型——锁

深入理解Java内存模型——锁

深入理解JMM(Java内存模型) --锁

深入理解Java内存模型

java内存模型深入理解java内存模型的系列好文

深入理解Java内存模型——volatile