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 这四种程序运行结果都有可能发生!
  • 相关阅读:
    linux常用脚本
    shell学习笔记
    Linux常用命令List
    Centos7部署Zabbix
    centos7安装nagios步骤
    nagios报错HTTP WARNING: HTTP/1.1 403 Forbidden解决方法
    U盘安装CentOS7
    Thread线程控制之sleep、join、setDaemon方法的用处
    EfficientDet框架详解 | 目前最高最快最小模型,可扩缩且高效的目标检测(附源码下载)
    ubuntu18.04 安装多版本cuda ,原来版本为9.0,在新增8.0
  • 原文地址:https://www.cnblogs.com/chenmingjun/p/8729477.html
Copyright © 2011-2022 走看看