zoukankan      html  css  js  c++  java
  • 死锁问题的描述和代码体现

    死锁问题的描述和代码体现

      同步弊端:效率低;如果出现了同步嵌套,就容易产生死锁问题。
      死锁问题:是指两个或者两个以上的线程在执行的过程中,因争夺资源产生的一种互相等待现象。

    同步代码块的嵌套案例代码如下:

    1 package cn.itcast_02;
    2 
    3 public class MyLock {
    4     // 创建两把锁对象
    5     public static final Object objA = new Object();
    6     public static final Object objB = new Object();
    7 }
     1 package cn.itcast_02;
     2 
     3 public class DieLock extends Thread {
     4 
     5     private boolean flag;
     6 
     7     public DieLock(boolean flag) {
     8         this.flag = flag;
     9     }
    10 
    11     @Override
    12     public void run() {
    13         if (flag) {
    14             synchronized (MyLock.objA) {
    15                 System.out.println("if objA");
    16                 synchronized (MyLock.objB) {
    17                     System.out.println("if objB");
    18                 }
    19             }
    20         } else {
    21             synchronized (MyLock.objB) {
    22                 System.out.println("else objB");
    23                 synchronized (MyLock.objA) {
    24                     System.out.println("else objA");
    25                 }
    26             }
    27         }
    28     }
    29     
    30 }
     1 package cn.itcast_02;
     2 
     3 /*
     4  * 同步的弊端:
     5  *         A:效率低
     6  *         B:如果出现了同步嵌套,就容易产生死锁问题
     7  * 
     8  * 死锁:
     9  *         是指两个或者两个以上的线程在执行的过程中,因争夺资源产生的一种互相等待现象。
    10  * 
    11  * 举例:
    12  *         中国人和美国人一起吃饭案例。
    13  *         正常情况:
    14  *             中国人:筷子两支
    15  *             美国人:刀和叉
    16  *         现在:
    17  *             中国人:筷子1支,刀一把
    18  *             美国人:筷子1支,叉一把
    19  */
    20 public class DieLockDemo {
    21     public static void main(String[] args) {
    22         DieLock dl1 = new DieLock(true);
    23         DieLock dl2 = new DieLock(false);
    24 
    25         dl1.start();
    26         dl2.start();
    27     }
    28 }
    理想情况下程序的运行结果为:
    if objA if objB else objB else objA 或者 else objB else objA if objA if objB 死锁情况下程序的运行结果为:
    if objA else objB 或者 else objB if objA 这四种程序运行结果都有可能发生!
  • 相关阅读:
    MonkeyScript_API
    APP性能(Monkey)【启动时间、CPU、流量、电量、内存、FPS、过度渲染】
    adb基本命令 & Monkey发生随机事件命令及参数说明
    MonkeyRunner_API
    2021春招冲刺-1218 页面置换算法 | sort的原理 | 语义化标签 | 标签的继承
    2021春招冲刺-1217 线程与进程 | ES6语法 | h5新增标签
    2021春招冲刺-1216 死锁 | 箭头函数 | 内联元素 | 页面渲染
    【unity】旧世开发日志
    HTTP 与HTTPS 简单理解
    GET POST 区分
  • 原文地址:https://www.cnblogs.com/chenmingjun/p/8729477.html
Copyright © 2011-2022 走看看