死锁是什么?
A持有A锁,B持有B锁,但是他们都想要去抢夺对方的锁。
我去搜了一下别人写的死锁的条件:
我的理解就是A锁和B锁只有一份,一次只能给一个线程用。A线程占有A锁,在等待B线程释放B锁。B线程也是这样的,它占有了B锁,在等待A线程释放A锁。并且AB两个线程都不能把对方的锁抢过来。如果是多个线程的话,就会有一个线程链,上一个线程,都拥有下一个线程需要的锁。
先写一个死锁的例子:
控制台输出:
怎么排查死锁?
1.使用jps -l定位进程号
2.使用jstack 进程号,来找到死锁问题
我刚才重启了一下IDEA就好了:
直接翻到最底下