synchronized鎖重入問題
先說結論:一個執行緒得到了一個物件的方法後,還可以呼叫這個物件的其他加鎖的方法,一個執行緒執行在進入了子類的方法後,還可以呼叫父類的加鎖方法。
如下面所示:
package com.lydon.thread;
public class SyncDubbo {
public synchronized void method1(){
System.out.println("i am method1");
method2();
}
public synchronized void method2(){
System.out.println("i am method2");
method3();
}
public synchronized void method3(){
System.out.println("i am method3");
}
public static void main(String[] args) {
final SyncDubbo syncDubbo = new SyncDubbo();
Runnable target;
Thread thread=new Thread(new Runnable() {
public void run() {
syncDubbo.method1();
}
});
thread.start();
}
}
輸出結果為:
i am method1
i am method2
i am method3
同樣的,對於子類呼叫父類的同步方法,也是可以的
package com.lydon.thread;
public class SyncDubbo2 {
static class Main{
public int num=10;
public synchronized void operationSup(){
try {
num--;
System.out.println("Main print i ="+num);
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
static class SubMain extends Main{
public synchronized void operationSub(){
try {
while (num>0){
num--;
System.out.println("SubMain print i ="+num);
Thread.sleep(200);
this.operationSup();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
final SyncDubbo2.SubMain subMain = new SyncDubbo2.SubMain();
Runnable target;
Thread thread=new Thread(new Runnable() {
public void run() {
subMain.operationSub();
}
});
thread.start();
}
}
一定要保證子類父類都是synchronized修飾的,不然就會出現執行緒 安全問題
相關文章
- Java synchronized 可重入鎖 基本概念Javasynchronized
- 淺談Java中的鎖:Synchronized、重入鎖、讀寫鎖Javasynchronized
- java中synchronized鎖定物件問題Javasynchronized物件
- 可重入鎖與不可重入鎖理解
- Java 多執行緒學習筆記(五)synchronized 鎖重入Java執行緒筆記synchronized
- 【Java面試】什麼是可重入,什麼是可重入鎖? 它用來解決什麼問題?Java面試
- 重入鎖的理解
- Java多執行緒/併發10、不可重入鎖/自旋鎖、可重入鎖Java執行緒
- redis分散式鎖-可重入鎖Redis分散式
- java重入鎖、公平鎖和非公平鎖Java
- 從原始碼入手詳解ReentrantLock,一個比synchronized更強大的可重入鎖原始碼ReentrantLocksynchronized
- Synchronized同步鎖synchronized
- 可重入鎖原始碼分析原始碼
- synchronized類鎖與物件鎖synchronized物件
- Redisson 分散式鎖原始碼 01:可重入鎖加鎖Redis分散式原始碼
- Golang可重入鎖的實現Golang
- Java 重入鎖 ReentrantLock 原理分析JavaReentrantLock
- synchronized 鎖的原理synchronized
- java 同步鎖(synchronized)Javasynchronized
- 上海某小公司面試題:synchronized鎖原理面試題synchronized
- Java併發-顯式鎖篇【可重入鎖+讀寫鎖】Java
- ZooKeeper 分散式鎖 Curator 原始碼 01:可重入鎖分散式原始碼
- 併發王者課-鉑金3:一勞永逸-如何理解鎖的多次可重入問題
- 王者併發課-鉑金3:一勞永逸-如何理解鎖的多次可重入問題
- 從此不怕Synchronized鎖synchronized
- Synchronized鎖及其膨脹synchronized
- synchronized鎖的升級synchronized
- 你真的懂synchronized鎖?synchronized
- ZooKeeper 分散式鎖 Curator 原始碼 03:可重入鎖併發加鎖分散式原始碼
- ReentrantLock可重入鎖——原始碼詳解ReentrantLock原始碼
- Go 為什麼不支援可重入鎖?Go
- Java中可重入鎖ReentrantLock原理剖析JavaReentrantLock
- Redis實現可重入的分散式鎖Redis分散式
- synchronized鎖機制 之 程式碼塊鎖synchronized
- Java 種15種鎖的介紹:公平鎖,可重入鎖,獨享鎖,互斥鎖等等Java
- Java 種15種鎖的介紹:公平鎖,可重入鎖,獨享鎖,互斥鎖等等...Java
- Lock介面、重入鎖ReentrantLock、讀寫鎖ReentrantReadWriteLockReentrantLock
- synchronized憑什麼鎖得住?synchronized