java多线程系列-死锁与活锁的区别,死锁与饥饿的区别
2021-05-12 14:30
标签:提高 导致 对象 同步 其他 不可 条件 不能 优先级 死锁: 产生死锁的必要条件: 只需要破坏上面4个必要条件的其中一个就能破坏,比如: 活锁: 活锁与死锁的区别: 饥饿: 死锁与饥饿的区别: 产生饥饿的原因: java多线程系列-死锁与活锁的区别,死锁与饥饿的区别 标签:提高 导致 对象 同步 其他 不可 条件 不能 优先级 原文地址:https://www.cnblogs.com/zh-ch/p/13138587.html
是指两个或者两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,他们都将无法推进下去
产生死锁的原因:
互相争夺共享资源
任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试、失败、尝试、失败。在这期间线程状态会不停的改变
死锁会阻塞,一直等待对方释放资源,一直处在阻塞状态;活锁会不停的改变线程状态尝试获得资源。活锁有可能自行解开,死锁则不行
一个或者多个线程因为种种原因无法获得所需要的资源,导致一直无法执行的状态。一直有线程级别高的暂用资源,线程低的一直处在饥饿状态。
比如ReentrantLock显示锁里提供的不公平锁机制,不公平锁能够提高吞吐量但不可避免的会造成某些线程的饥饿
线程处于饥饿是因为不断有优先级高的线程占用资源,当不再有高优先级的线程争抢资源时,饥饿状态将会自动解除。