1. 程式人生 > >java中執行緒同步Synchronized,監視器monitor和鎖lock的關係是什

java中執行緒同步Synchronized,監視器monitor和鎖lock的關係是什

既然有關監視器monitor的概念比較難,大家怎麼解釋的都有。首先我給出一下java的官方文件,也是最權威的解釋:
Synchronizationis built around an internal entity known as the intrinsic lock ormonitor lock. (The API specification often refers to this entity simplyas a "monitor."),Every object has an intrinsic lock associated with it.By convention, a thread that needs exclusive and consistent access toan object's fields has to acquire the object's intrinsic lock beforeaccessing them, and then release the intrinsic lock when it's done withthem.

源自:
http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html


根據官方文件,我來說說我的看法。馬克-to-win: synchronized工作機制是這樣的:Java中每個物件都有一把鎖與之相關聯,鎖控制著物件的synchronized程式碼。一個要執行物件的synchronized程式碼的執行緒必須先獲得那個物件的鎖。有點兒監控(monitor)的感覺嗎?

synchronized關鍵字使用方式有兩種:synchronized方法和synchronized塊。以下會給出例子:
例1.9.3-本章原始碼class A {
public synchronized void f1() {
for (int i = 0; i < 3; i++) {
try {
Thread.sleep(1000);
} catch (Exception e) {
}
System.out.println("i = " + i);
}
}
}

class MyThread extends Thread {
A a;

public MyThread(A a) {
this.a = a;
}
public void run() {
a.f1();
}
}

public class TestMark_to_win {
public static void main(String[] args) {
A a = new A();。。。。。。。。。。。。。。。。。詳情請進:
http://www.mark-to-win.com/JavaBeginner/JavaBeginner6_web.html#relationshipOfSynchronizedLockandmonitor

相關推薦

java執行同步Synchronized監視器monitorlock關係

既然有關監視器monitor的概念比較難,大家怎麼解釋的都有。首先我給出一下java的官方文件,也是最權威的解釋: Synchronizationis built around an internal entity known as the intrinsic lock ormonitor lock. (Th

java執行同步的幾種方法

方法一: 使用synchronized關鍵字  由於java的每個物件都有一個內建鎖,當用此關鍵字修飾方法時, 內建鎖會保護整個方法。在呼叫該方法前,需要獲得內建鎖,否則就處於阻塞狀態。 注: synchronized關鍵字也可以修飾靜態方法,此時如果呼叫該靜態方法,將會

JAVA執行同步的方法(7種)彙總

同步的方法: 一、同步方法   即有synchronized關鍵字修飾的方法。 由於java的每個物件都有一個內建鎖,當用此關鍵字修飾方法時, 內建鎖會保護整個方法。在呼叫該方法前,需要獲得內建鎖,否則就處於阻塞狀態。 注: synchronized關鍵字也可以修飾靜態

java執行同步的理解(非常通俗易懂)

Java中執行緒同步的理解 我們可以在計算機上執行各種計算機軟體程式。每一個執行的程式可能包括多個獨立執行的執行緒(Thread)。 執行緒(Thread)是一份獨立執行的程式,有自己專用的執行棧。執行緒有可能和其他執行緒共享一些資源,比如,記憶體,檔案,資料庫等。

Java執行同步 synchronized 用法

在使用MongoDB的時候 (基於spring-mongo) ,我想在插入物件時獲取有序自增的主鍵 ,但是MongoDB的預設規則是生成一串無序 (大致有序) 的字串 .而Spring Data提供的主鍵生成方法也是隨機的 String/BigInteger

JAVA執行使用synchronized與wait,notify實現排它同步通訊

JAVA使用多執行緒實現上傳圖片,當上傳結束後,再通過另外一個執行緒告知下載圖片結束,這時候就需要用到synchronized以及

java執行執行同步synchronized(不同步的問題、佇列與的產生解決

# 0、不同步的問題 併發的執行緒不安全問題: 多個執行緒同時操作同一個物件,如果控制不好,就會產生問題,叫做執行緒不安全。 我們來看三個比較經典的案例來說明**執行緒不安全的問題**。 ## 0.1 訂票問題 例如前面說過的黃牛訂票問題,可能出現負數或相同。 [執行緒建立方式&&黃牛訂票

Java執行 - 執行同步 synchronized

synchronized是Java同步的基礎,只有徹底瞭解synchronized的物件鎖、可重入鎖...特性,將來在使用高階的ReentrantLock、ReentrantReadWriteLock才能得心應手 本文將透過大量的具體例項來了解synchronized的特性 具體例項

Java執行同步非同步、以及執行的安全

  什麼是執行緒同步?     這裡的“同”是協同的意思,並不是共同。那麼就很好理解同步了,就是一起操作但並不是同時操作。比如流水線組裝汽車,可以視作一個執行緒,只有裝好了上一步的門,才可以裝下一步的門窗玻璃。沒有裝門能裝上玻璃嗎?顯然不行。所以執

Java執行你真的會用嗎

轉載自   Java中執行緒池,你真的會用嗎 在《深入原始碼分析Java執行緒池的實現原理》這篇文章中,我們介紹過了Java中執行緒池的常見用法以及基本原理。 在文中有這樣一段描述: 可以通過Executors靜態工廠構建執行緒池,但一般不建議這樣使用。 關於這個

Java執行你真的瞭解會用嗎

在《 深入原始碼分析Java執行緒池的實現原理 》這篇文章中,我們介紹過了Java中執行緒池的常見用法以及基本原理。 在文中有這樣一段描述: 可以通過Executors靜態工廠構建執行緒池,但一般不建議這樣使用。 關於這個問題,在那篇文章中並沒有深入的展開。作者之所以這

JAVA 執行同步 synchronized

  synchronized public void methidA(){ for(int i = 0; i< 100;i++){ System.out.println("methidA"); try{ Thread.sleep(5); }

Java執行你真的會用嗎?

  我騎著小毛驢,喝著大紅牛哇,哩個啷格里格朗,別問我為什麼這木開心,如果活著不是為了浪蕩那將毫無意義      今天來捋一捋我們平日經常用的instanceof和typeof的一些小問題      typeof:      typeof裡面是由一個小坑的  我們今天著重來研

Java執行--同步與死synchronized;等待與喚醒:wait、notify、notifyAll;生命週期

class Info{ // 定義資訊類 private String name = "李興華"; // 定義name屬性 private String content = "JAVA講師" ; // 定義content屬性 private boolean flag = false ; // 設

Java併發——執行同步Volatile與Synchronized詳解

0. 前言 轉載請註明出處:http://blog.csdn.net/seu_calvin/article/details/52370068 面試時很可能遇到這樣一個問題:使用volatile修飾int型變數i,多個執行緒同時進行i++操作,這樣可以實現執行緒安全嗎?提到

Java執行(二):執行同步synchronizedvolatile

        上篇通過一個簡單的例子說明了執行緒安全與不安全,在例子中不安全的情況下輸出的結果恰好是逐個遞增的(其實是巧合,多執行幾次,會產生不同的輸出結果),為什麼會產生這樣的結果呢,因為建立的Count物件是執行緒共享的,一個執行緒改變了其成員變數num值,下一個執行緒

Java執行安全(synchronized

package tk.javazhangwei.thread.syn; /*** * 執行緒安全問題 * * @author zw * */ public class SynDemo01 { public static void main(String[]

Java執行同步同步程式碼塊、wait、notify與notifyAll的真正含義與工作原理

今天在和導師討論Java多執行緒程式設計的同步問題時,發現自己對同步程式碼塊、wait()方法、notify()方法和notifyAll()方法的理解不太清晰,於是在網上查閱資料,可是結果眾說紛紜,又在

Java執行同步 機制與synchronized

要是很多人在等這把鑰匙,等鑰匙還回來以後,誰會優先得到鑰匙?Not guaranteed。象前面例子裡那個想連續使用兩個上鎖房間的傢伙,他中間還鑰匙的時候如果還有其他人在等鑰匙,那麼沒有任何保證這傢伙能再次拿到。 (JAVA規範在很多地方都明確說明不保證,象Thread.sleep()休息後多久會返回執行,相

java執行安全執行執行通訊快速入門

一:多執行緒安全問題 ###1 引入 /* * 多執行緒併發訪問同一個資料資源 * 3個執行緒,對一個票資源,出售 */ public class ThreadDemo { public static void main(String[