什么是死锁
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,简单举个例子:
现有两个线程:线程A,线程B
两个
Lock
:Lock1
,Lock2
,分别作为同步代码块的锁①线程A的同步代码块中优获取
Lock1
的对象锁,在睡眠一小段时间过后,获取Lock2
对象锁②线程B的同步代码块中优获取
Lock2
的对象锁,在睡眠一小段时间过后,获取Lock1
对象锁假设线程A获取到了
Lock1
对象锁,在经过短时间睡眠后(睡眠过程中线程B获取到了Lock2
对象锁),线程A尝试获取Lock2
对象锁时被阻塞了,这就形成了一个死锁
public class Test { public static void main(String[] args) throws InterruptedException { Object lock1 = new Object(); Object lock2 = new Object(); /** * 创建第一个线程 */ Thread t1 = new Thread(new Runnable() { @Override public void run() { synchronized (lock1){