Java死鎖程式碼示例
阿新 • • 發佈:2018-12-21
public class DeadLocak { private final Object left = new Object(); private final Object right = new Object(); public void leftRight() throws Exception { synchronized (left) { Thread.sleep(2000); synchronized (right) { System.out.println("leftRight end!"); } } } public void rightLeft() throws Exception { synchronized (right) { Thread.sleep(2000); synchronized (left) { System.out.println("rightLeft end!"); } } } public static void main(String[] args) { final DeadLocak deadLocak = new DeadLocak(); new Thread(new Runnable() { @Override public void run() { try { deadLocak.leftRight(); } catch (Exception e) { e.printStackTrace(); } } }).start(); new Thread(new Runnable() { @Override public void run() { try { deadLocak.rightLeft(); } catch (Exception e) { e.printStackTrace(); } } }).start(); } }
利用jstack -pid 號檢視發現