• java 22


     同步的弊端:
       A:效率低
       B:容易产生死锁

     死锁:
       两个或两个以上的线程在争夺资源的过程中,发生的一种相互等待的现象。

     举例:
      中国人,美国人一起吃饭。
     正常情况:
      中国人:筷子两支
       美国人:刀和叉
     死锁时:
        中国人:筷子1支,刀一把
      美国人:筷子1支,叉一把

    首先创建一个死锁的类

    1 public class MyLock {
    2     // 创建两把锁对象
    3     public static final Object objA = new Object();
    4     public static final Object objB = new Object();
    5 }
     1 public class DieLock extends Thread {
     2 
     3     private boolean flag;
     4     //自定义标签
     5     public DieLock(boolean flag) {
     6         this.flag = flag;
     7     }
     8 
     9     @Override
    10     public void run() {
    11         if (flag) {
    12             synchronized (MyLock.objA) {
    13                 System.out.println("if objA");
    14                 synchronized (MyLock.objB) {
    15                     System.out.println("if objB");
    16                 }
    17             }
    18         } else {
    19             synchronized (MyLock.objB) {
    20                 System.out.println("else objB");
    21                 synchronized (MyLock.objA) {
    22                     System.out.println("else objA");
    23                 }
    24             }
    25         }
    26     }
    27 }
    1 public class DieLockDemo {
    2     public static void main(String[] args) {
    3         DieLock dl1 = new DieLock(true);
    4         DieLock dl2 = new DieLock(false);
    5 
    6         dl1.start();
    7         dl2.start();
    8     }
    9 }

    程序执行的理想结果是:

      if objA

      if objB

      else objB

      else objA

    但,由于死锁的原因:

    例子  flag = true; 时,进去执行if objA,

        而这个时候,可能flag = false;抢到了cpu的资源,就强制运行

          else objB。这个时候,就陷入了死锁状态。

        两个线程谁都动不了,因为各自的钥匙都在对方的手上。

    何事都只需坚持.. 难? 维熟尔。 LZL的自学历程...只需坚持
  • 相关阅读:
    Jmeter压力测试-结果分析(三十)
    C#正则密码验证
    Docker
    c# framework 缓存依赖
    NETMQ订阅,超时断线重连
    RabbitMQ发布/订阅模式
    RAS非对称加密解密,公钥私钥
    .NETCore批量插入数据BulkLoader
    .NETcore使用CSRedisCore操作Redis
    Rabbitmq简单队列
  • 原文地址:https://www.cnblogs.com/LZL-student/p/5947142.html
Copyright © 2020-2023  润新知