死鎖在平時開發,尤爲是多併發編程時是要避免,不過要本身刻意寫個死鎖還不必定容易,下面參考別人代碼寫一個html
代碼編程
public class DeadLock implements Runnable{ private int flag = 1; private static final Object o1 = new Object(); private static final Object o2 = new Object(); public void setFlag(int flag) { this.flag = flag; } @Override public void run() { if (flag == 1) { synchronized (o1) { System.out.println(Thread.currentThread().getName() + " o1"); try { Thread.sleep(800); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (o2) { System.out.println(Thread.currentThread().getName() + " o2"); } } } if (flag == 2) { synchronized (o2) { System.out.println(Thread.currentThread().getName() + " o2"); try { Thread.sleep(800); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (o1) { System.out.println(Thread.currentThread().getName() + " o1"); } } } } public static void main(String[] args) { DeadLock deadLock1 = new DeadLock(); DeadLock deadLock2 = new DeadLock(); deadLock1.setFlag(1); Thread thread1= new Thread(deadLock1, "Thread1"); thread1.start(); deadLock2.setFlag(2); Thread thread2= new Thread(deadLock2, "Thread2"); thread2.start(); } }
o一、o2是static類型屬於整個累,因此當定義deadLock一、deadLock2時是公用o一、o2的併發
deadLock1設置flag=1,先鎖住o1,而後睡800ms,此時ide
deadLock2設置flag=2,先鎖住o2,而後睡800msthis
而後deadLock1開始鎖o2,不過o2還被deadLock2鎖着,只好等待。。。spa
此時deadLock1開始鎖01,不過o1還被deadLock1鎖着,只好等待。。。code
相互等待形成死鎖htm
結果blog
Thread1 o1
Thread2 o2