所谓死锁,是指两个线程分别获取了锁定,互相等待另一个线程解除锁定的现象。
举例,假设A和B同吃一个大盘子所盛放的意大利面。盘子旁边只有一只汤匙和一只叉子,吃面时需要同时用到汤匙与叉子。此时,汤匙被A拿去了,叉子却又被B拿去了。A和B一直等待对方把餐具放下。像A和B这样面面相窥的现象就叫死锁。
(1)具有多个SharedResource参与者。
(2)线程锁定一个SharedResource时,还没解除前就去锁定另一个SharedResource。
(3)获取SharedResource参与者得顺序不固定(和SharedResource参与者是对等的)。
举例:
(1)多个SharedResource参与者,相当于汤匙与叉子。
(2)锁定某个SharedResource参与者后,就去锁定其他SharedResource。就相当于或者汤匙想要获取对方的叉子,或者反之。
(3)SharedResource角色是对等的。也就是说汤匙与叉子没有优先级。
三个条件破坏其一就可以避免死锁的发生。