A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 蒲公英在飞 中级黑马   /  2014-7-16 07:17  /  1394 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请设计一个死锁程序?

6 个回复

倒序浏览
这是入学测试题吗?
回复 使用道具 举报
最简单的死循环:
class Test
{
    public static void main(String[] args)
    {
       int x =0;
       for(;;)
         x=0; //预防出现无功能、空语句循环而被编译器禁止编译。(C会禁止,JAVA没有深入了解以防万一吧)
    }
}
回复 使用道具 举报
好像死循环不等于死锁吧。
回复 使用道具 举报

class Test implements Runnable
{
  private boolean flage=false;
  Test(boolean flage)
        {
          this.flage=flage;
        }
  public void run()
        {
          if(flage)
                {
                   synchronized(MyLock.locka)
                        {
                           System.out.println("if  locka.....");
                        }
            synchronized(MyLock.lockb)
                        {
               System.out.println("if  lockb.....");
                        }
                }
       else
                {
                   synchronized(MyLock.lockb)
                        {
                            System.out.println("else  locka.....");

                        }
           synchronized(MyLock.locka)
                        {
                System.out.println("else  lockb.....");
                        }

                }
        }

}
class MyLock
{
        public static final Object locka=new Object();
    public static final Object lockb=new Object();
}
class Demo2
{
        public static void main(String[] args)
        {
                Test a=new Test(true);
                Thread t1=new Thread(a);
        Thread t2=new Thread(a);
                t1.start();
        t2.start();
        }
回复 使用道具 举报
  1. public class TestDeadLock implements Runnable {
  2.         Object o1 =new Object();
  3.         Object o2 =new Object();

  4. public int flag =1;
  5.         @Override
  6.         public void run() {
  7.         System.out.print("flag="+flag);
  8.        
  9.         if(flag==1){
  10.                 synchronized (o1) {
  11.                         try {
  12.                                 Thread.sleep(500);
  13.                         } catch (InterruptedException e) {

  14.                                 e.printStackTrace();
  15.                         }
  16.                         synchronized (o2) {
  17.                                 System.out.println("1");
  18.                         }                       
  19.                 }
  20.         }
  21.        
  22.         if(flag==0){
  23.                 synchronized (o2) {
  24.                         try {
  25.                                 Thread.sleep(500);
  26.                         } catch (InterruptedException e) {
  27.                                
  28.                                 e.printStackTrace();
  29.                         }
  30.                         synchronized (o1) {
  31.                                 System.out.println("0");
  32.                         }                       
  33.         }
  34.         }
  35.         }
  36.         public static void main(String[] args){
  37.                  TestDeadLock td1 =new TestDeadLock();
  38.                  TestDeadLock td2 =new TestDeadLock();
  39.                 td1.flag=1;
  40.                  td2.flag=0;
  41.                  Thread t1 =new Thread(td1);
  42.                  Thread t2 =new Thread(td2);
  43.                  t1.start();
  44.                  t2.start();
  45.         }
  46. }
复制代码
回复 使用道具 举报
非同一个对象的锁就是死锁
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马