java 線程中線程死鎖

在使用線程的時候需要注意,防止線程死鎖,這樣整個程序就會處於鎖定的等待狀態而無法繼續完成接下來的邏輯!

所以我們需要知道死鎖是怎樣產生的,這樣我們在以後的開發中就可以知道如何避免死鎖狀況的發生。

下面是一個死鎖的示例:

java code :

package test.javase.thread;

public class TestDeadLock extends Thread {
	static Object o1 = new Object(), o2 = new Object();
	int flag = 0;
	public void run() {
		if(flag == 0){
			synchronized (o1) {
				System.out.println("tdl1鎖定了o1");
				try {
					this.sleep(500);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				synchronized (o2){
					System.out.println("tdl1---success");
				}
			}
		}
		if(flag == 1){
			synchronized (o2) {
				System.out.println("tdl2鎖定了o2");
				try {
					this.sleep(500);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				synchronized (o1){
					System.out.println("tdl2---success");
				}
			}
		}
	}
	public static void main(String[] args) {
		TestDeadLock tdl1 = new TestDeadLock();
		TestDeadLock tdl2 = new TestDeadLock();
		tdl1.flag = 0;
		tdl2.flag = 1;
		tdl1.start();
		tdl2.start();
	}
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章