多執行緒-死鎖問題概述和使用
package cn.itcast_02;
public class DieLock extends Thread {
private boolean flag;
public DieLock(boolean flag) {
this.flag = flag;
}
@Override
public void run() {
if (flag) {
synchronized (MyLock.objA) {
System.out.println("if objA");
synchronized (MyLock.objB) {
System.out.println("if objB");
}
}
} else {
synchronized (MyLock.objB) {
System.out.println("else objB");
synchronized (MyLock.objA) {
System.out.println("else objA");
}
}
}
}
}
package cn.itcast_02;
public class MyLock {
// 建立兩把鎖物件
public static final Object objA = new Object();
public static final Object objB = new Object();
}
package cn.itcast_02;
/*
* 同步的弊端:
* A:效率低
* B:容易產生死鎖
*
* 死鎖:
* 兩個或兩個以上的執行緒在爭奪資源的過程中,發生的一種相互等待的現象。
*
* 舉例:
* 中國人,美國人吃飯案例。
* 正常情況:
* 中國人:筷子兩支
* 美國人:刀和叉
* 現在:
* 中國人:筷子1支,刀一把
* 美國人:筷子1支,叉一把
*/
public class DieLockDemo {
public static void main(String[] args) {
DieLock dl1 = new DieLock(true);
DieLock dl2 = new DieLock(false);
dl1.start();
dl2.start();
}
}
相關文章
- 多執行緒-執行緒組的概述和使用執行緒
- 多執行緒-執行緒池的概述和使用執行緒
- Java多執行緒(五):死鎖Java執行緒
- java多執行緒(5)死鎖Java執行緒
- Java多執行緒7:死鎖Java執行緒
- 多執行緒鎖的問題執行緒
- Python | 多執行緒死鎖問題的巧妙解決方法Python執行緒
- 多執行緒之8鎖問題執行緒
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- 多執行緒-程式和執行緒的概述執行緒
- 多執行緒 HashMap 死迴圈 問題解析執行緒HashMap
- 多執行緒死鎖除錯小技巧執行緒除錯
- 23、Java併發性和多執行緒-重入鎖死Java執行緒
- 多執行緒-JDK5之後的Lock鎖的概述和使用執行緒JDK
- Slave SQL執行緒與PXB FTWRL死鎖問題分析SQL執行緒
- java多執行緒:執行緒同步synchronized(不同步的問題、佇列與鎖),死鎖的產生和解決Java執行緒synchronized佇列
- 多執行緒程式設計的鎖問題解析(鎖競爭死鎖活鎖及Date Race等)執行緒程式設計
- 多執行緒下HashMap的死迴圈問題執行緒HashMap
- python多執行緒程式設計4: 死鎖和可重入鎖Python執行緒程式設計
- 多執行緒-執行緒概述等執行緒
- 多執行緒概述執行緒
- 多執行緒-定時器的概述和使用執行緒定時器
- Java多執行緒程式設計(同步、死鎖、生產消費者問題)Java執行緒程式設計
- 【Java】【多執行緒】同步方法和同步程式碼塊、死鎖Java執行緒
- 執行緒中的死鎖執行緒
- GCD&&執行緒死鎖GC執行緒
- GCD 之執行緒死鎖GC執行緒
- Java執行緒面試題(02) Java執行緒中如何避免死鎖Java執行緒面試題
- 多執行緒問題執行緒
- JavaSE_多執行緒入門 執行緒安全 死鎖 狀態 通訊 執行緒池Java執行緒
- Java多執行緒-死鎖的出現和解決Java執行緒
- 多執行緒非同步安全,安全鎖的問題執行緒非同步
- 多執行緒的概述執行緒
- Python 多執行緒和鎖Python執行緒
- 多執行緒_鎖執行緒
- java多執行緒執行問題Java執行緒
- 如何處理執行緒死鎖執行緒
- Java 實現執行緒死鎖Java執行緒