什么是死锁
两个线程分别是线程1和线程2。线程1执行过程中,先获得对象a的锁,然后要再获得b的锁才能继续执行代码;而线程2正巧相反,先获得对象b的锁,然后要再获得a的锁才能继续执行代码。这时,两个线程都等着对方解锁,才能继续执行,这时,两个线程就进入等待状态,最终不会有线程执行。这就变成了死锁。
简单的死锁代码
1 | public class DeadLockTest implements Algorithm { |
运行结果1
2
3
4
5
6=====>>thread 1 running
=====>>thread 2 running
Thread-0 get lock1
Thread-1 get lock2
Thread-0 try to get lock2
Thread-1 try to get lock1