死锁是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。
通俗的说,就是多个进程中,有的进程占用了其他进程需要的资源,导致程序卡住,无法继续进行。
一个简单的死锁demo可以很明显的看到
程序一直处在线程相互等待资源的状态
可以证明此时已造成资源竞争的死锁
public class DeadLockDemo {
private static Object A = new Object();
private static Object B = new Object();
public static void main(String[] args) {
// TODO Auto-generated method stub
deadLock();
}
private static void deadLock() {
// TODO Auto-generated method stub
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
synchronized (A) {
System.out.println("This is t1 synchronized A");
try {
System.out.println("This is t1 synchronized A sleep 100");
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
}
synchronized (B) {
System.out.println("This is t1 synchronized B");
}
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
synchronized (B) {
System.out.println("This is t2 synchronized B");
try {
System.out.println("This is t2 synchronized B sleep 100");
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
}
synchronized (A) {
System.out.println("This is t2 synchronized A");
}
}
}
});
t1.start();
t2.start();
}
}
输出结果为: