• 什么情况下会发生死锁


    死锁发生的条件

    • 互斥条件:就是一个资源只能有一个进程占有,不可以被两个或者多个进程占有
    • 不可抢占条件:进程已经获得的资源在未使用完之前,不可以被抢占,只能在使用完之后自己释放
    • 占有申请条件:进程自己已经至少保持一个资源,又请求其他资源,但是这个资源被其他进程占有,而且又不释放自己已经占有的资源
    • 循环等待条件:发生死锁时,必定会形成一个进程——资源的环路。进程集合{p1,p2,p3}中,p1请求p2占有的资源,p2请求p3占有的资源,p3请求p1占有的资源

    看到一个例子感觉很好:http://blog.csdn.net/qq_35064774/article/details/51793656

     1 package com.qf.test;
     2 public class TestThread {  
     3     public static void main(String[] args) {  
     4 // test dead lock  
     5         Thread t9 = new Thread(  
     6                 new DeadLock(true));  
     7         Thread t10 = new Thread(  
     8                 new DeadLock(false));  
     9         t9.start();  
    10         t10.start();  
    11     }  
    12 }  
    13   
    14 class DeadLock implements Runnable{  
    15   
    16     boolean lockFormer;  
    17     static Object o1 = new Object();  
    18     static Object o2 = new Object();  
    19     DeadLock(boolean lockFormer){  
    20         this.lockFormer = lockFormer;  
    21     }  
    22       
    23     @Override  
    24     public void run() {  
    25         if(this.lockFormer){  
    26             synchronized (o1) {  
    27                 try {  
    28                     Thread.sleep(500);  
    29                 } catch (InterruptedException e) {  
    30                     e.printStackTrace();  
    31                 }  
    32                 synchronized (o2) {  
    33                     System.out.println("1ok");  
    34                 }  
    35             }  
    36         }else{  
    37             synchronized (o2) {  
    38                 try {  
    39                     Thread.sleep(500);  
    40                 } catch (InterruptedException e) {  
    41                     e.printStackTrace();  
    42                 }  
    43                 synchronized (o1) {  
    44                     System.out.println("1ok");  
    45                 }  
    46             }  
    47         }  
    48           
    49     }  
    50 }  

    最后两个线程都等着对方的资源,都进入等待状态,最后不会有线程执行,就进入了死锁状态

  • 相关阅读:
    计算直线的交点数
    不容易系列之(4)——考新郎
    神、上帝以及老天爷
    N!
    Number Sequence
    33_ABB机器人智能周期保养与复位操作
    34_WorldZone区域监控功能的使用
    三菱PLC(FX3U)的模拟量应用
    第19集 PLC盒子的使用
    第18集 使用黑盒设计创建宏文件
  • 原文地址:https://www.cnblogs.com/qf123/p/8610899.html
Copyright © 2020-2023  润新知