package deadLockDemo; public class Person implements Runnable{ private String name; private static final String CHOPSTICK = "筷子"; private static final String FORK = "刀叉"; public Person(String name) { this.name = name; } @Override public void run() { if ("中国人".equals(name)) { synchronized (FORK) { System.out.printf(name + "拿到了" + FORK); System.out.printf(name +"想拿" + CHOPSTICK); } synchronized (CHOPSTICK) { System.out.printf(name + "拿到了" + CHOPSTICK); } } else { synchronized (CHOPSTICK) { System.out.printf(name + "拿到了" + CHOPSTICK); System.out.printf(name +"想拿" + FORK); } synchronized (FORK) { System.out.printf(name + "拿到了" + FORK); } } } } package deadLockDemo; /** * 死锁的示例 * */ public class DeadLockDemo { public static void main(String[] args) { Person p1 = new Person("中国人"); Person p2 = new Person("美国人"); new Thread(p1).start(); new Thread(p2).start(); } }