黑马程序员_我的死锁练习

来源:互联网 发布:网络歌曲排行榜100首 编辑:程序博客网 时间:2024/05/21 17:54



  ------- android培训、java培训、期待与您交流! ----------


/*思路:两个或多个线程,同时访问一个资源,为了避免某一点几个线程同时操作一个数据,造成错误,就实行了同步机制,锁定同一个数据某一点只让一个线程进行操作,
结束之后再由其他线程进行操作,这样就提高了多线程的安全性,但这样的操作也存在局限性,就是每一次访问都要查看是否已同步锁,就会造成步骤繁琐.若线程过长,这样就相似于单线程;
所以就采用了分段同步的方法提高效率,尽量缩短线程同步运算的时间,来提高效率. 
这样也有一个弊端,就是当同步锁过多时,两个线程同步中需要互相访问对方的同步锁,在对方没有解锁的情况下自己不能访问,自己不解锁的情况下,对方又不能访问,这就造成了死锁现象.
实际开发中要避免死锁的发生,这样的现象多发生在嵌套同步之中,下面是一个很简单的双重同步锁嵌套死锁.*/


public class 死锁练习 {


public static void main(String[] args) {//当A门B门同时打开时就会死锁

                      双重门 t=new 双重门();
            Thread t1=new Thread(t);
            Thread t2=new Thread(t);
              t1.start();
              t2.start();
}


}
class 双重门 implements Runnable
{   boolean  a=true;           //从A到B属于true状态,从B到A属于false状态
    Object A=new Object();//设置两个门,双重门
    Object B=new Object();   
  
  public void run(){
         while("开始循环"!=null ){
    
         if (a==true)
   {
  synchronized(A) 
  {System.out.println(Thread.currentThread().getName()+"拿到A钥匙进入A门去往B门");//此处是一个房间有两个门, A门和B门,经过之后A门会自动上锁,且不能回头且每个门有                                                                                                                                                                //且只有一把钥匙.
                                                                                          // 拿到B门的钥匙之后,打开B门离开房间.此时A门钥匙释放;
    synchronized (B)
     {
   System.out.println(Thread.currentThread().getName()+"从B门出来");
     }
   }
  a=false;
    }
   else {
    synchronized (B){
    System.out.println(Thread.currentThread().getName()+"拿到B钥匙从B进入去往A门");//此处是一个房间有两个门, A门和B门,经过之后B门会自动上锁,且不能回头且每个门有                                                                                                                                                                //且只有一把钥匙.
                                                                                //  拿到A门的钥匙之后,打开A门离开房间.此时B门钥匙释放;
    synchronized(A){
    System.out.println(Thread.currentThread().getName()+"从A门出来");
   
   
      }
    }
    a=true;
   }
     }


    }
}

  ------- android培训、java培训、期待与您交流! ----------

0 0
原创粉丝点击