zoukankan      html  css  js  c++  java
  • 多线程008如何预防死锁

    死锁发生的四个必要条件:

    1.互斥条件,同一时间只能有一个线程获取资源。

    2.不可剥夺条件,一个线程已经占有的资源,在释放之前不会被其他线程抢占。

    3.请求和保持条件,线程等待过程中不会释放已占有的资源。

    4.循环等待条件,多个线程互相等待对方释放资源。

    死锁的预防,就是要打破这四个必要条件:

    1.互斥条件无法改变。

    2.破坏不可剥夺条件,一个线程不能获取所需的全部资源处于等待的时候,将他占有的资源隐式的释放重新加入道系统资源列表中,可以被其他线程使用。

    等待的线程只有重新获得自己原有的资源以及新申请的资源才可以重新启动。

    3.破坏请求与保持条件,每个线程在开始执行时就申请他所需要的全部资源;每个线程在申请锁需要的资源时他本身不占用系统资源。

    4.破坏循环等待条件,将系统中所有资源按顺序编号,将紧缺的,稀少的采用较大编号,在申请资源时必须按照编号顺序进行,一个线程只有先获得较小的编号的资源,才能申请较大编号的资源。

  • 相关阅读:
    开发中遇到的问题点
    ThreadLocal
    Java多线程10:join()方法
    Java多线程9:中断机制
    Java多线程8:wait()和notify()/notifyAll()
    Java多线程7:死锁
    Java多线程0:核心理论
    MySQL中and和or的优先级的问题
    Java多线程6:Synchronized锁代码块(this和任意对象)
    shiro英语
  • 原文地址:https://www.cnblogs.com/asenyang/p/15570445.html
Copyright © 2011-2022 走看看