1. 程式人生 > 實用技巧 >Java-多執行緒-執行緒死鎖程式碼實現

Java-多執行緒-執行緒死鎖程式碼實現

package cn.bruce.Thread;

public class LockDemo {
    public final static void main(String[] args) {
        // 建立執行緒任務類物件
        DeadLock DL = new DeadLock();
        // 建立兩個執行緒
        Thread t0 = new Thread(DL);
        Thread t1 = new Thread(DL);
        // 啟動執行緒
        t0.start();
        t1.start();
    }
}

// 定義鎖物件類 class Locka { private Locka() { } //定義唯一物件 public static final Locka LOCKA = new Locka(); } // 定義鎖物件類 class Lockb { private Lockb() { } //定義唯一物件 public static final Lockb LOCKB = new Lockb(); } // 定義執行緒任務類 class DeadLock implements Runnable { private int i; @Override
public void run() { while (true) { if (i % 2 == 0) {// 先進入A同步,再進入B同步 synchronized (Locka.LOCKA) { System.out.println("if...Locka"); synchronized (Lockb.LOCKB) { System.out.println(
"if...Lockb"); } } } else {// 先進入B同步,再進入A同步 synchronized (Lockb.LOCKB) { System.out.println("else...Lockb"); synchronized (Locka.LOCKA) { System.out.println("else...Locka"); } } } i++; } } }

由上圖可見,程式是沒結束的,只是卡死了,正常情況應該是一組一組交替出現if和else ,當不是一對一對出現時,就會發生死鎖了。