一.原因:
1.互斥使用,只能同时供一个线程使用.
2.不可抢占,除非主动释放,否则不能被抢占.
3.保持与等待,一个线程去尝试获取多把锁,在获取第2把锁的过程中会保持对第1把锁的获取状态.
4.循环等待,锁形成环路.
二.解决方案:
给锁编号,上锁的时候从小到大依次上锁,譬如如果一个线程要上1号和2号两把锁,如果1号锁被占用,不能上2号锁,等其它线程释放1号锁资源后,依次上锁.
三.场景:
a.一个线程,一把锁,但是是不可重入锁,该线程针对这个锁连续加锁两次,就会出现死锁.
b.两个线程,两把锁,这两个线程先分别获取到一把锁,然后再同时尝试获取对方的锁.
c. m个线程n把锁,哲学家就餐问题.