黑马程序员技术交流社区

标题: 大家帮忙看一下,我写的死锁程序是不是有问题啊??? [打印本页]

作者: 孙国军    时间: 2012-4-10 00:49
标题: 大家帮忙看一下,我写的死锁程序是不是有问题啊???
  1. /*
  2. 需求:死锁程序
  3. */
  4. class SiSuo
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.                 Suo s=new Suo();
  9.                 Thread t1=new Thread(s);
  10.                 Thread t2=new Thread(s);
  11.                 t1.start();
  12.                 t2.start();
  13.         }
  14. }
  15. class Suo implements Runnable
  16. {
  17.         private int num=1000;
  18.         Object obj=new Object();
  19.         public void run()
  20.         {
  21.                 while(true)
  22.                         synchronized(obj)
  23.                         {
  24.                                 show();
  25.                         }

  26.         }
  27.         public synchronized void show()
  28.         {
  29.                 synchronized(obj)
  30.                 {
  31.                         if(num>0)
  32.                                 System.out.println(Thread.currentThread().getName()+"show......"+num--);
  33.                 }
  34.         }

  35. }
复制代码
怎么我运行了好几次都没有锁住啊???
作者: 宋蕈    时间: 2012-4-10 09:04
在你synchronized() 这个语句里面 应该是传入 this 对象,表示的
是锁住当前调用该方法的对象,即:锁住当前线程,当前对象
作者: 陈超    时间: 2012-4-10 09:56
你的程序中两个线程t1和t2都必须先获得obj对象持有的锁,才能执行,根本就不能死锁

        public void run()

        {

                while(true)

                        synchronized(obj)//此处t1和t2都必须先获得obj对象持有的锁

                        {

                                show();

                        }
    }
要想死锁必须让t1和t2两个线程同时持有两个不同的锁,并且都不释放锁,而且都想要对方的锁。




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