Java-多執行緒-執行緒死鎖程式碼實現
阿新 • • 發佈:2020-08-28
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; @Overridepublic 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 ,當不是一對一對出現時,就會發生死鎖了。