Java編寫一個死鎖的程序

死鎖是在多線程編程中常常遇到的問題,現在用java編寫一個簡單的死鎖程序。

程序在main()方法中啓動2個線程,“線程-A”和“線程-B”。 線程-A 先拿到 lockA,再尋求拿到 lockB;線程-B 先拿到locB,再需求拿到lockA,如下圖,於是變成循環等待,造成死鎖。
在這裏插入圖片描述
代碼

public class DeadLockDemo {
 
	public static void main(String[] args) {
		Object lockA = new Object();
		Object lockB = new Object();
		new Thread(new Runnable() {
			@Override
			public void run() {
				String name = Thread.currentThread().getName();
				synchronized (lockA) {
					System.out.println(name + " got lockA,  want LockB");
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
 
						e.printStackTrace();
					}
					synchronized (lockB) {
						System.out.println(name + " got lockB");
						System.out.println(name + ": say Hello!");
					}
				}
			}
		}, "線程-A").start();
 
		new Thread(new Runnable() {
			@Override
			public void run() {
 
				String name = Thread.currentThread().getName();
				synchronized (lockB) {
					System.out.println(name + " got lockB, want LockA");
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
 
						e.printStackTrace();
					}
					synchronized (lockA) {
						System.out.println(name + " got lockA");
						System.out.println(name + ": say Hello!");
					}
				}
 
			}
		}, "線程-B").start();
	}
}

運行結果:

線程-A got lockA, want LockB
線程-B got lockB, want LockA

程序死鎖了,每個線程都不能完成。
轉自:https://blog.csdn.net/xidianliuy/article/details/51568073

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