如何避免死锁
死锁发生的条件 互斥,共享资源只能被一个线程占用 占有且等待,线程 t1 已经取得共享资源 s1,尝试获取共享资源 s2 的时候,不释放共享资源 s1 不可抢占,其他线程不能强行抢占线程 t1 占有的资源 s1 循环等待,线程 t1 等待线程 t2 占有的资源,线程 t2 等待线程 t1 占有的资源 避免死锁的方法 对于以上 4 个条件,只要破坏其中一个条件,就可以避免死锁的发生。 对于第一个条件 "互斥" 是不能破坏的,因为加锁就是为了保证互斥。 其他三个条件,我们可以尝试 一次性申请所有的资源,破坏 "占有且等待" 条件 占有部分资源的线程进一步申请其他资源时,如果申请不到,主动释放它占有的资源,破坏 "不可抢占" 条件 按序申请资源,破坏 "循环等待" 条件 使用管理类一次性申请所有的资源,破坏 "占有且等待" 条件示例 package constxiong.concurrency.a023; import java.util.HashSet; import java.util.Set; /** * 测试 一次性申请所有的资源,破坏 "占有且等待" 条件示例 * @author ConstXiong * @date 2019-09-24 14:04:12 */ public class TestBreakLockAndWait { //单例的资源管理类 private