日期:2014-05-20  浏览次数:20654 次

麻烦大家看看该程序是否会造成死锁
现有程序:
public   class   ThreadTest   implements   Runnable   {
        private   static   Object   obj   =   new   Object();

        private   String   name   =   null;

        public   ThreadTest(String   name)   {
                this.name   =   name;
        }

        public   static   void   main(String[]   args)   {
                new   Thread(new   ThreadTest( "tt1 ")).start();
                new   Thread(new   ThreadTest( "tt2 ")).start();
        }

        public   void   run()   {
                while   (true)   {
                        System.out.println( "before   "   +   this.name);
                        synchronized   (obj)   {
                                //执行一些其它代码
                                this.go();
                        }
                        System.out.println( "after   "   +   this.name);
                }
        }
       
        /**
          *   可以直接被其他线程调用
          */
        public   void   go()   {
                synchronized   (obj)   {
                        System.out.println(this.name   +   "running... ");
                }
        }
}

------解决方案--------------------
如果while死循环里没有sleep,while循环所在的线程会狂占CPU
------解决方案--------------------
不会,他们不具备死锁的条件.
------解决方案--------------------
你的程序没有sleep,造成死机倒是可能的.
------解决方案--------------------
不会死锁..

并不存在一个在等待池中的线程等另一个在等待池中线程的情况
------解决方案--------------------
不会发生死锁现象

死机很有可能

产生死锁的必要条件是:1、互斥条件;2、不可剥夺条件(不可抢占);
3、部分分配;4、循环等待。