zoukankan      html  css  js  c++  java
  • java中同步嵌套引起的死锁事例代码

    /*
     目的:自己写一个由于同步嵌套引起的死锁!
     思路:多个线程在执行时,某一时刻,0-Thread绑定了LockA锁,1-Thread绑定了LockB锁!
     当0-Thread要去绑定LockB锁时 和 1-Thread要去绑定LockA锁时都不能绑定,此时两个线程不能继续进行!
    */
    class Ticket implements Runnable{
       public boolean flag;
       Ticket(boolean flag){
          this.flag = flag;
       }
       Ticket(){
          flag=true;
       }
       public void run(){
           if(flag){
    	      synchronized(MyLock.lockA){
    		      System.out.println(Thread.currentThread().getName() + " lockA &&--->lockB");
    			  try{
    		         Thread.sleep(100);
    		      }catch(InterruptedException e){
    		      }
    			  synchronized(MyLock.lockB){
    			       System.out.println(Thread.currentThread().getName() + " lockB");
    			  }
    		  }
    	   }
    	   else{
    	      synchronized(MyLock.lockB){
    		      System.out.println(Thread.currentThread().getName() + " lockB &&--->lockA");
    			  synchronized(MyLock.lockA){
    			       System.out.println(Thread.currentThread().getName() + " lockA");
    			  }
    		  }
    	   }
       }
    }
    
    class MyLock{
       public static final MyLock lockA = new MyLock();
       public static final MyLock lockB = new MyLock();
    }
    
    public class DeadLockDemo{
       public static void main(String[] args){
       //虽然new了两个任务对象,但是不影响演示由于同步嵌套引起的死锁情况
       //    new Thread(new Ticket(true)).start();
       //    new Thread(new Ticket(false)).start();
       
       ///////////////////////////////////////////////////////////
       
            Ticket tt = new Ticket();//只产生一个线程任务!这样写还要控制好sleep的时间才好.....
            new Thread(tt).start();
    		try{
    		   Thread.sleep(20);
    		}catch(InterruptedException e){
    		}
    		tt.flag=false;
            new Thread(tt).start();
       }
    }
    

      

  • 相关阅读:
    redis 基本操作-python 使用redis-手机验证接口-发送短信接口
    登录-注册页面修订
    10-29 课堂笔记
    git 协作开发
    git 常规使用
    luffy-city 基础环境搭建(至轮播图前后台交互实现)-步骤目录
    偏移分页-游标(加密)分页-自定义过滤器-第三方过滤器插件(django-filter)
    drf 大总结
    739. Daily Temperatures
    617. Merge Two Binary Trees
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/3877083.html
Copyright © 2011-2022 走看看