首页 > 其他 > 详细

写一个死锁

时间:2018-06-03 18:39:33      阅读:242      评论:0      收藏:0      [点我收藏+]

死锁产生的原因:

一个线程进入锁一需要锁二,

另一个线程进入锁二需要锁一,

由于锁一锁二都被占了,所以线程执行不下去。

所以只需写一个相互交叉的锁一锁二就可以产生死锁。

class sisuogoucheng implements Runnable
{
  private boolean panduan=true;

  sisuogoucheng(boolean panduan)
  {
    this.panduan=panduan;  //写一个判断条件使线程进入不同的锁。
  }


  public void run()

  {    

    if(panduan)

    {
      synchronized(mykey.obj1)
      {
        System.out.println("t1----obj1");
        synchronized(mykey.obj2)
        {
          System.out.println("t1------obj2");
        }
      }
    }
    else
    {
      synchronized(mykey.obj2)
      {
        System.out.println("t2-------obj2");
        synchronized(mykey.obj1)
        {
          System.out.println("t2---------obj1");
        }
      }
    }
  }
}

class mykey
{
  static Object obj1=new Object();  //创建两个不同的锁
  static Object obj2=new Object();
}

public class sisuo

{

  public static void main(String[] args)

   {

    Thread t1=new Thread(new sisuogoucheng(true));
    Thread t2=new Thread(new sisuogoucheng(false));

    t1.start();
    t2.start();
  }

}

写一个死锁

原文:https://www.cnblogs.com/shenhengjia/p/9129779.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!