线程死锁例子
代码:
/*
实现线程死锁的例子
*/
public class DeadLockDemo {
private static final Object resource1 = new Object();//资源 1
private static final Object resource2 = new Object();//资源 2
public static void main(String[] args) {
new Thread1().start();
new Thread2().start();
}
static class Thread1 extends Thread {
@Override
public void run() {
synchronized (resource1) {
System.out.println(Thread.currentThread() + "get resource1");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread() + "waiting get resource2");
synchronized (resource2) {
System.out.println(Thread.currentThread() + "get resource2");
}
}
}
}
static class Thread2 extends Thread {
@Override
public void run() {
synchronized (resource2) {
System.out.println(Thread.currentThread() + "get resource2");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread() + "waiting get resource1");
synchronized (resource1) {
System.out.println(Thread.currentThread() + "get resource1");
}
}
}
}
}
输出:
Thread[Thread-0,5,main]get resource1
Thread[Thread-1,5,main]get resource2
Thread[Thread-1,5,main]waiting get resource1
Thread[Thread-0,5,main]waiting get resource2