zoukankan      html  css  js  c++  java
  • 【转】深入理解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&

  • 相关阅读:
    编译原理三大经典书籍
    c#之委托总结
    shell编程基础
    专家是什么?我真的想知道(转)
    linux sed
    判断一个脚本中的变量是否为空(转)
    JAVA Stack栈和Heap堆的区别(转)
    CMD获取当前目录的绝对路径 (转)
    RTP协议分析
    VS2010旗舰版安装图解
  • 原文地址:https://www.cnblogs.com/web-java/p/5820414.html
Copyright © 2011-2022 走看看