Java tutorial
public class DeadlockDemo { public static void main(String[] args) throws Exception { UseShared s1 = new UseShared("x"); UseShared s2 = new UseShared("y"); s1.start(); s2.start(); s1.join(); s2.join(); } } class UseShared extends Thread { String s1 = "", s2 = ""; UseShared(String name) { setName(name); } public void run() { for (int i = 0; i < 100; i++) { if (getName().equals("x")) method1(); else method2(); try { Thread.sleep(1000); } catch (Exception e) { } } } void method1() { synchronized (s1) { System.out.println("method1: s1"); synchronized (s2) { System.out.println("method1: s2"); } } } void method2() { synchronized (s2) { System.out.println("method2: s1"); synchronized (s1) { System.out.println("method2: s2"); } } } }