写一个死锁

Posted Saber本

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写一个死锁相关的知识,希望对你有一定的参考价值。

死锁产生的原因:

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

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

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

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

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();
  }

}

以上是关于写一个死锁的主要内容,如果未能解决你的问题,请参考以下文章

写一个死锁程序

java 线程问题,写一个死锁(原理:只有互相都等待对方放弃资源才会产生死锁)

写一个java死锁的demo

写一个会导致死锁的线程

一句 Task.Result 就死锁, 这代码还怎么写?

并发编程之死锁解析