Java 多執行緒學習筆記(五)synchronized 鎖重入
關鍵字synchronized 擁有鎖重入的功能,也就是使用synchronized時,當一個執行緒得到一個物件鎖後,再次請求此物件鎖時是可以再次得到該物件的鎖的。這也就證明在一個synchronized方法/快的內部呼叫本類的其他的synchronized方法/快時,是永遠可以得到鎖的。
package extthread;
import myservice.Service;
public class MyThread extends Thread {
@Override
public void run() {
Service service = new Service();
service.service1();
}
}
package myservice;
public class Service {
synchronized public void service1() {
System.out.println("service1");
service2();
}
synchronized public void service2() {
System.out.println("service2");
service3();
}
synchronized public void service3() {
System.out.println("service3");
}
}
package test;
import extthread.MyThread;
public class Run {
public static void main(String[] args) {
MyThread t = new MyThread();
t.start();
}
}
可重入鎖也支援在父子類繼承的環境中。package extthread;
import myservice.Main;
import myservice.Sub;
public class MyThread extends Thread {
@Override
public void run() {
Sub sub = new Sub();
sub.operateISubMethod();
}
}
package myservice;
public class Main {
public int i = 10;
synchronized public void operateIMainMethod() {
try {
i--;
System.out.println("main print i=" + i);
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package myservice;
public class Sub extends Main {
synchronized public void operateISubMethod() {
try {
while (i > 0) {
i--;
System.out.println("sub print i=" + i);
Thread.sleep(100);
this.operateIMainMethod();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
package test;
import extthread.MyThread;
public class Run {
public static void main(String[] args) {
MyThread t = new MyThread();
t.start();
}
}
此實驗說明,當存在父子關係時,子類完全可以通過可重入鎖呼叫父類的同步方法。
相關文章
- Java 多執行緒學習筆記Java執行緒筆記
- Java多執行緒學習筆記(自用)Java執行緒筆記
- 多執行緒筆記---鎖(Synchronized)的優化和種類執行緒筆記synchronized優化
- Java多執行緒(五):死鎖Java執行緒
- Thinking in Java--Java多執行緒學習筆記(1)ThinkingJava執行緒筆記
- Thinking in Java---多執行緒學習筆記(2)ThinkingJava執行緒筆記
- Python學習筆記 - 多執行緒Python筆記執行緒
- Java多執行緒程式設計筆記2:synchronized同步方法Java執行緒程式設計筆記synchronized
- Java多執行緒(三):SynchronizedJava執行緒synchronized
- java多執行緒之(synchronized)Java執行緒synchronized
- java多執行緒3:synchronizedJava執行緒synchronized
- 多執行緒(二)、內建鎖 synchronized執行緒synchronized
- Java多執行緒筆記Java執行緒筆記
- Java多執行緒之二(Synchronized)Java執行緒synchronized
- Java多執行緒學習筆記(六) 長樂未央篇Java執行緒筆記
- Java多執行緒學習(六)Lock鎖的使用Java執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- Java多執行緒之執行緒同步【synchronized、Lock、volatitle】Java執行緒synchronized
- Java多執行緒學習(一)Java多執行緒入門Java執行緒
- Java多執行緒學習Java執行緒
- C# 多執行緒學習筆記 – 1C#執行緒筆記
- @Java | Thread & synchronized – [ 執行緒同步鎖 基本使用]Javathreadsynchronized執行緒
- Java多執行緒學習——執行緒通訊Java執行緒
- Java多執行緒學習(2)執行緒控制Java執行緒
- Java多執行緒之synchronized理論Java執行緒synchronized
- Java多執行緒——synchronized的使用示例Java執行緒synchronized
- Java多執行緒之synchronized詳解Java執行緒synchronized
- Java核心技術學習筆記——進階——第五章 Java多執行緒和併發程式設計——5.2 Java多執行緒實現Java筆記執行緒程式設計
- #大學#Java多執行緒學習02(執行緒同步)Java執行緒
- Android的Java多執行緒部簡介和Synchronized學習總結AndroidJava執行緒synchronized
- Java 多執行緒NIO學習Java執行緒
- Java多執行緒學習(五)執行緒間通訊知識點補充Java執行緒
- JAVA-多執行緒(關鍵字:synchronized)Java執行緒synchronized
- 多執行緒筆記執行緒筆記
- java多執行緒(5)死鎖Java執行緒
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒
- Linux程式執行緒學習筆記Linux執行緒筆記
- java多執行緒中的synchronized的byte[0]Java執行緒synchronized
- 淺談Java中的鎖:Synchronized、重入鎖、讀寫鎖Javasynchronized