1. 程式人生 > >Java內建鎖synchronized的可重入性

Java內建鎖synchronized的可重入性

當執行緒請求一個由其它執行緒持有的物件鎖時,該執行緒會阻塞,而當執行緒請求由自己持有的物件鎖時,如果該鎖是重入鎖,請求就會成功,否則阻塞.

    我們來看看synchronized,它擁有強制原子性的內建鎖機制,是一個重入鎖,所以在使用synchronized時,當一個執行緒請求得到一個物件鎖後再次請求此物件鎖,可以再次得到該物件鎖,就是說在一個synchronized方法/塊的內部呼叫本類的其他synchronized方法/塊時,是永遠可以拿到鎖,如下:

01 public class Child extends Father {
02
public static void main(String[] args) {
03 Child child = new Child();
04 child.doSomething();
05 }
06
07 public synchronized void doSomething() {
08 System.out.println(
"child.doSomething()");
09 doAnotherThing(); // 呼叫自己類中其他的synchronized方法
10
11 }
12
13 private synchronized void doAnotherThing() {
14

相關推薦

java synchronized

《java併發程式設計實踐》一書中,關於synchronized內建鎖的可重入的例子如下: ------------------------------------------------------------------------------------------

Javasynchronized

當執行緒請求一個由其它執行緒持有的物件鎖時,該執行緒會阻塞,而當執行緒請求由自己持有的物件鎖時,如果該鎖是重入鎖,請求就會成功,否則阻塞.     我們來看看synchronized,它擁有強制原子性的內建鎖機制,是一個重入鎖,所以在使用synchronized

Java的物件頭到Javasynchronized的底層實現(一)

        就如標題,今天我們的話題會從物件說起。我們知道物件在JVM的記憶體結構中,是存放在堆記憶體中的(new  一個類之後JVM會在堆上為new出的物件申請一塊空間)。在記憶體中,一個Java物件包含三部分:物件頭、例項資料和對齊填充。而物件頭記憶體有的資訊就有ma

java 自旋且無死

java自旋鎖 的實現原理:如果自旋鎖被另外一個執行緒物件持有,那麼當前獲取鎖的執行緒將陷入while迴圈等待,直到那個持有自旋鎖的執行緒物件釋放它所持有的自旋鎖,那麼那些想要獲取該自旋鎖的執行緒物件 將會有一個獲得該自旋鎖。   基於他這種原理,等待的時候,並不釋放cpu

synchronized

如果某個執行緒檢視獲得一個已經由它自己持有的鎖,那麼這個請求就會成功。 public class Father {protected synchronized void say() {System.out.println(Thread.currentThread().get

Lock、synchronized=====中斷、公平、讀寫====CountDownLatch、CyclicBarrier 、join()、執行緒池

Lock、synchronized Synchronized 如果一個程式碼塊被synchronized修飾了,當一個執行緒獲取了對應的鎖,並執行該程式碼塊時,其他執行緒便只能一直等待,等待獲取鎖的執行緒釋放鎖,而這裡獲取鎖的執行緒釋放鎖只會有兩種情況:   1)獲取鎖的執行緒

10-Synchronized:悲觀

Synchronized:悲觀鎖,可重入鎖 特點:可重入的鎖 可重入鎖,一個獲得的鎖的執行緒沒執行完可以繼續獲得該鎖。 執行緒佔用鎖的時候,如果執行的同步程式碼出現異常,會自動將鎖讓出。 同步程式碼塊的程式碼是同步執行的(一次執行完),而非同步程

Java 併發: Synchronized

  摘要:在多執行緒程式設計中,執行緒安全問題是一個最為關鍵的問題,其核心概念就在於正確性,即當多個執行緒訪問某一共享、可變資料時,始終都不會導致資料破壞以及其他不該出現的結果。而所有的併發模式在解決這個問題時,採用的方案都是序列化訪問臨界

java基礎總結(二十九)--Java不可理解

來自:https://blog.csdn.net/u012545728/article/details/80843595   最近正在閱讀Java ReentrantLock原始碼,始終對可重入和不可重入概念理解不透徹,進行學習後記錄在這裡。 基礎知識 Java多執行緒的wai

Java 併發開發: Synchronized

摘要: 在多執行緒程式設計中,執行緒安全問題是一個最為關鍵的問題,其核心概念就在於正確性,即當多個執行緒訪問某一共享、可變資料時,始終都不會導致資料破壞以及其他不該出現的結果。而所有的併發模式在解決這個問題時,採用的方案都是序列化訪問臨界資源 。在 Java 中,提供了

Java 中15種的介紹:公平,獨享,互斥,樂觀,分段,自旋等等

Java 中15種鎖的介紹 在讀很多併發文章中,會提及各種各樣鎖如公平鎖,樂觀鎖等等,這篇文章介紹各種鎖的分類。介紹的內容如下: 公平鎖 / 非公平鎖 可重入鎖 / 不可重入鎖 獨享鎖 / 共享鎖 互斥鎖 / 讀寫鎖 樂觀鎖 / 悲觀鎖 分段鎖

Java多執行緒01_函式、

測試環境 OS:windows7_X64 JDK:jdk1.8.0_20 IDE: eclipse_neon 一、可重入函式 相信很多人都聽說過可重入函式,可重入函式最重要的兩條法則就是: 只

JAVA機制-,中斷,公平,讀寫,自旋

部落格引用處(以下內容在原有部落格基礎上進行補充或更改,謝謝這些大牛的部落格指導): JAVA鎖機制-可重入鎖,可中斷鎖,公平鎖,讀寫鎖,自旋鎖 在併發程式設計中,經常遇到多個執行緒訪問同一個 共享資源 ,這時候作為開發者必須考慮如何維護資料一致性,在java中synchronized

Java 種15種的介紹:公平,獨享,互斥等等...

Java 中15種鎖的介紹 在讀很多併發文章中,會提及各種各樣鎖如公平鎖,樂觀鎖等等,這篇文章介紹各種鎖的分類。介紹的內容如下: 公平鎖 / 非公平鎖 可重入鎖 / 不可重入鎖 獨享鎖 / 共享鎖 互斥鎖 / 讀寫鎖 樂觀鎖 / 悲觀鎖 分段鎖 偏向

Java 種15種的介紹:公平,獨享,互斥等等

Java 中15種鎖的介紹 在讀很多併發文章中,會提及各種各樣鎖如公平鎖,樂觀鎖等等,這篇文章介紹各種鎖的分類。介紹的內容如下

Java

啟動類 public class LockTest { public static void main(String[] args) { ObjLock test = new ObjLock(); for (int i = 0; i <

舉例講解 Python 中的死和互斥

簡單來說,死鎖是一個資源被多次呼叫,而多次呼叫方都未能釋放該資源就會造成死鎖,這裡結合例子說明下兩種常見的死鎖情況。 1、迭代死鎖 該情況是一個執行緒“迭代”請求同一個資源,直接就會造成死鎖: Python import

Java的簡單認識

        多執行緒開發離不開鎖機制,現在的Java語言中,提供了2種鎖,一種是語言特性提供的內建鎖,還有一種是 java.util.concurrent.locks 包中的鎖,這篇文章簡單整理一下內建鎖的知識點。 內建鎖在Java語言中的表現:         多執行緒的鎖,其實本質上就是給一塊記憶體

--自旋、阻塞、悲觀、樂觀、讀寫、偏向所、輕量級、重量級膨脹、物件和類

參考:http://blog.csdn.net/a314773862/article/details/54095819 自旋鎖 自旋鎖可以使執行緒在沒有取得鎖的時候,不被掛起,而轉去執行一個空迴圈,(即所謂的自旋,就是自己執行空迴圈),若在若干個空迴圈後,執行緒如果可以獲得

不可的實現以及測試

可重入鎖定義:執行緒去請求自己擁有的鎖可請求到interface SelfDefineLock{ void lock(); void unlock(); } class Father{ SelfDefineLock lock; Father(SelfDefineLo