/** * 一个线程死锁的例子 */ public class DeadLock { public static void main(String[] args) { // 2个资源 final Object resource1 = "resource1"; final Object resource2 = "resource2"; // 第一个线程,想先占有resource1,再尝试着占有resource2 Thread t1 = new Thread() { public void run() { // 尝试占有了resource1 synchronized (resource1) { // 成功占有resource1 System.out.println("Thread 1: locked resource 1"); // 休眠一段时间 try { Thread.sleep(50); } catch (InterruptedException e) { } // 尝试着占有resource2,如果不能占有,该线程会一直等待 synchronized (resource2) { System.out.println("Thread 1: locked resource 2"); } } } }; // 第二个线程,想先占有resource2,再占有resource1 Thread t2 = new Thread() { public void run() { // 尝试着占有resource2 synchronized (resource2) { // 成功占有resource2 System.out.println("Thread 2: locked resource 2"); // 休眠一段时间 try { Thread.sleep(50); } catch (InterruptedException e) { } // 尝试占有resource1,如果不能占有,该线程会一直等待 synchronized (resource1) { System.out.println("Thread 2: locked resource 1"); } } } }; // 启动两个线程 t1.start(); t2.start(); } }