zoukankan      html  css  js  c++  java
  • 使用内部类实现线程死锁

    线程死锁会不断消耗资源,禁止使用。本文纯属娱乐。

    在使用synchronized嵌套的时候很容易出现死锁现象,因此慎用synchronized嵌套。

    public class TestDeadLock {

      public static void main(String [] args) {
        new TestDeadLock().show();
      }

      public void show() {
        DeadLock dl = new DeadLock();
        Thread tdl1 = new Thread(dl, "老王");
        Thread tdl2 = new Thread(dl, "小王");

        tdl1.start();
        tdl2.start();
        }

      class DeadLock implements Runnable{
        private Object key1 = new Object();
        private Object key2 = new Object();
        private boolean isFlag;

        @Override
        public void run() {
          if(!isFlag) {
            isFlag = true;
            synchronized(key1) {
              System.out.println(Thread.currentThread().getName() + "拿到了key1");
              synchronized(key2) {
                System.out.println(Thread.currentThread().getName() + "拿到了key2");
              }
            }
          }else {
            isFlag = false;
            synchronized(key2) {
              System.out.println(Thread.currentThread().getName() + "拿到了key2");
              synchronized(key1) {
                System.out.println(Thread.currentThread().getName() + "拿到了key1");
              }
            }
          }
        }

        public boolean isFlag() {
          return isFlag;
        }

        public void setFlag(boolean isFlag) {
          this.isFlag = isFlag;
        }
      }
    }

  • 相关阅读:
    matlab 自定义函数及调用
    matlab 逻辑数组及其应用
    matlab 嵌套循环的学习
    matlab和C语言的break及continue测试
    matlab 向量法建数组(推荐)
    matlab for循环应用(阶乘及the day of year)
    matlab for循环的三种类型
    ORACLE创建用户,建表空间,授予权限
    Linux计划任务
    android开发环境搭建
  • 原文地址:https://www.cnblogs.com/helloworldlx/p/8536390.html
Copyright © 2011-2022 走看看