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多執行緒/併發10、不可重入鎖/自旋鎖、可重入鎖Java執行緒
- Java 多執行緒學習筆記Java執行緒筆記
- java學習筆記--多執行緒Java筆記執行緒
- Java多執行緒學習筆記(自用)Java執行緒筆記
- Java多執行緒5:synchronized鎖方法塊Java執行緒synchronized
- Java多執行緒4:synchronized鎖機制Java執行緒synchronized
- Java 多執行緒學習筆記(三)-守護執行緒Java執行緒筆記
- Java多執行緒(五):死鎖Java執行緒
- Java多執行緒學習筆記(二) (轉)Java執行緒筆記
- 多執行緒學習筆記執行緒筆記
- 多執行緒筆記---鎖(Synchronized)的優化和種類執行緒筆記synchronized優化
- 23、Java併發性和多執行緒-重入鎖死Java執行緒
- JAVA學習筆記之 多執行緒賣票Java筆記執行緒
- 多執行緒學習筆記 (轉)執行緒筆記
- Java多執行緒(三):SynchronizedJava執行緒synchronized
- java多執行緒之(synchronized)Java執行緒synchronized
- java多執行緒3:synchronizedJava執行緒synchronized
- Thinking in Java--Java多執行緒學習筆記(1)ThinkingJava執行緒筆記
- Java多執行緒程式設計筆記2:synchronized同步方法Java執行緒程式設計筆記synchronized
- 多執行緒(二)、內建鎖 synchronized執行緒synchronized
- Java 多執行緒 學習筆記(二)停止執行緒的幾種方法Java執行緒筆記
- Thinking in Java---多執行緒學習筆記(2)ThinkingJava執行緒筆記
- Java 多執行緒學習筆記(四)yield 介紹Java執行緒筆記
- Java學習筆記之執行緒Java筆記執行緒
- Java多執行緒筆記Java執行緒筆記
- Python學習筆記 - 多執行緒Python筆記執行緒
- C#多執行緒學習筆記C#執行緒筆記
- Java多執行緒學習(六)Lock鎖的使用Java執行緒
- Java多執行緒之二(Synchronized)Java執行緒synchronized
- Java多執行緒學習筆記(六) 長樂未央篇Java執行緒筆記
- java學習筆記.04——執行緒池Java筆記執行緒
- Java多執行緒學習Java執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- Java多執行緒學習(一)Java多執行緒入門Java執行緒
- C# 多執行緒學習筆記 – 1C#執行緒筆記
- Java多執行緒學習——執行緒通訊Java執行緒
- Java多執行緒學習(2)執行緒控制Java執行緒
- Java多執行緒之synchronized理論Java執行緒synchronized