黑马程序员技术交流社区

标题: 请设计一个死锁程序? [打印本页]

作者: 蒲公英在飞    时间: 2014-7-16 07:17
标题: 请设计一个死锁程序?
请设计一个死锁程序?
作者: 叶飞翔    时间: 2014-7-16 07:44
这是入学测试题吗?
作者: OCTSJimmy    时间: 2014-7-16 07:57
最简单的死循环:
class Test
{
    public static void main(String[] args)
    {
       int x =0;
       for(;;)
         x=0; //预防出现无功能、空语句循环而被编译器禁止编译。(C会禁止,JAVA没有深入了解以防万一吧)
    }
}
作者: 你好吗    时间: 2014-7-16 09:17
好像死循环不等于死锁吧。
作者: 蒲公英在飞    时间: 2014-7-16 20:38

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();
        }
作者: 裤裆里的温柔、    时间: 2014-7-16 23:29
  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. }
复制代码

作者: 思如涌泉    时间: 2014-7-17 07:52
非同一个对象的锁就是死锁




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2