黑马程序员技术交流社区

标题: 关于老毕说的死锁和谐到底是什么情况?结果是什么? [打印本页]

作者: 不想飞不到    时间: 2014-8-11 00:07
标题: 关于老毕说的死锁和谐到底是什么情况?结果是什么?
本帖最后由 不想飞不到 于 2014-8-11 00:11 编辑

复制代码

class Test implements Runnable
{
        private boolean flag;
        Test(boolean flag)
        {
                this.flag = flag;
        }

        public void run()
        {
                if(flag)
                {
                        while(true)
                        {
                                synchronized(MyLock.locka)
                                {
                                        System.out.println(Thread.currentThread().getName()+"...if locka ");
                                        synchronized(MyLock.lockb)
                                        {
                                                System.out.println(Thread.currentThread().getName()+"..if lockb");                                       
                                        }
                                }
                        }
                }
                else
                {
                        while(true)
                        {
                                synchronized(MyLock.lockb)
                                {
                                        System.out.println(Thread.currentThread().getName()+"..else lockb");
                                        synchronized(MyLock.locka)
                                        {
                                                System.out.println(Thread.currentThread().getName()+".....else locka");
                                        }
                                }
                        }
                }
        }
}


class MyLock
{
        static Object locka = new Object();
        static Object lockb = new Object();
}

class  DeadLockTest
{
        public static void main(String[] args)
        {
                Thread t1 = new Thread(new Test(true));
                Thread t2 = new Thread(new Test(false));
                t1.start();
                t2.start();
        }
}



他说的死锁和谐,他跑了没跑出来,我自己电脑上也没跑出来,跑出来是什么样的?

作者: 陈君    时间: 2014-8-11 00:13
就是一个线程执行完这两句之后System.out.println(Thread.currentThread().getName()+"..else lockb");
System.out.println(Thread.currentThread().getName()+".....else locka");
另一个线程执行 了这两句:
System.out.println(Thread.currentThread().getName()+"...if locka ");
System.out.println(Thread.currentThread().getName()+"..if lockb");        
类似这种情况出现的话就不会出现死锁。不要想着自己把那种情况试出来。完全没必要。这种几率太小了。能理解了就行了                                
作者: 不想飞不到    时间: 2014-8-11 00:19
陈君 发表于 2014-8-11 00:13
就是一个线程执行完这两句之后System.out.println(Thread.currentThread().getName()+"..else lockb");
Sy ...

奥 就是两边的锁刚好交给下一个线程,这样就不会出现无法访问下一个锁了,估计跑出来也跑不了几个 多谢~




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