mysql 活锁_死锁与活锁的区别

约定不等于承诺〃 2022-10-27 13:54 289阅读 0赞

死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。

产生死锁的必要条件:

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

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

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

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

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

活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”, 而处于死锁的实体表现为等待;活锁有可能自行解开,死锁则不能。

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

Java中导致饥饿的原因:

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

线程被永久堵塞在一个等待进入同步块的状态,因为其他线程总是能在它之前持续地对该同步块进行访问。

线程在等待一个本身也处于永久等待完成的对象(比如调用这个对象的wait方法),因为其他线程总是被持续地获得唤醒。

发表评论

表情:
评论列表 (有 0 条评论,289人围观)

还没有评论,来说两句吧...

相关阅读

    相关 &

    一、活锁(liveLock) 活锁是指线程间资源冲突激烈,引起线程不断的尝试获取资源,不断的失败。活锁有点类似于线程饥饿,虽然资源并没有被别人持有,但由于各种原因而无法得

    相关 、饥饿

    死锁 死锁是多线程编程中一种常见的问题,它发生在两个或多个线程相互等待对方释放资源的情况下。这种情况会导致所有线程都无法继续执行,程序停滞不前。典型的死锁情况包括以下几个

    相关 、饥饿和

    推荐:[Java并发编程汇总][Java] 死锁、饥饿和活锁 原文地址 [Java并发编程系列之十二:死锁、饥饿和活锁][Java 1] 正文 死锁发生在一个线程

    相关 理解

    活锁:就是指线程一直处于运行状态,但却是在做无用功,而这个线程本身要完成的任务却一直无法进展。就想小猫追着自己的尾巴咬,虽然一直在咬 却一直没有咬到。活锁的典型例子是某些重试

    相关 &

    死锁 假设 你银行账户上有1000元钱 你老婆拿银行卡去ATM机上去取这1000元钱 银行数据库系统先确认你的账户上有这1000元 然后,银行拿钱给你老婆

    相关 和饥饿解释

    死锁:是指 两个或两个以上的进程(或线程)在执行过程中,因 争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁