鎖是java併發編程中最重要的同步機制。鎖除了讓臨界區互斥執行外,還可讓釋放鎖的線程向獲取同一個鎖的線程發送消息。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 關係能夠分爲兩類:併發
上述happens before 關係的圖形化表現形式以下:app
在上圖中,每個箭頭連接的兩個節點,表明了一個happens before 關係。黑色箭頭表示程序順序規則;橙色箭頭表示監視器鎖規則;藍色箭頭表示組合這些規則後提供的happens before保證。線程
轉自:http://www.infoq.com/cn/articles/java-memory-model-5&同步