死锁与活锁的区别,死锁与饥饿的区别?

Posted programb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了死锁与活锁的区别,死锁与饥饿的区别?相关的知识,希望对你有一定的参考价值。

死锁是指两个或两个以上的进程或线程在执行过程中因争夺资源而造成 

的一种互相等待的现象若无外力作用它们都将无法推进下去

产生死锁的必要条件

1、互斥条件所谓互斥就是进程在某一时间内独占资源

2、请求与保持条件一个进程因请求资源而阻塞时对已获得的资源保持不放

3、不剥夺条件:进程已获得资源在末使用完之前不能强行剥夺

4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系

活锁任务或者执行者没有被阻塞由于某些条件没有满足导致一直重复尝试

失败尝试失败

活锁和死锁的区别在于处于活锁的实体是在不断的改变状态所谓的”,  

处于死锁的实体表现为等待活锁有可能自行解开死锁则不能

饥饿一个或者多个线程因为种种原因无法获得所需要的资源导致一直无法执 

行的状态

Java 中导致饥饿的原因

1、高优先级线程吞噬所有的低优先级线程的 CPU 时间

2、线程被永久堵塞在一个等待进入同步块的状态因为其他线程总是能在它之前 

持续地对该同步块进行访问

3、线程在等待一个本身也处于永久等待完成的对象(比如调用这个对象的 wait  

),因为其他线程总是被持续地获得唤醒

以上是关于死锁与活锁的区别,死锁与饥饿的区别?的主要内容,如果未能解决你的问题,请参考以下文章

死锁与活锁的区别,死锁与饥饿的区别?

死锁与活锁的区别,死锁与饥饿的区别?

java多线程系列-死锁与活锁的区别,死锁与饥饿的区别

JUC并发编程 活跃性 -- 活锁 & 死锁/活锁的区别 & 饥饿

死锁,活锁,饿死的区别

死锁与活锁的原因 与解决方法(附加“饿死”)