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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 不想飞不到 于 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();
        }
}



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

2 个回复

倒序浏览
就是一个线程执行完这两句之后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:13
就是一个线程执行完这两句之后System.out.println(Thread.currentThread().getName()+"..else lockb");
Sy ...

奥 就是两边的锁刚好交给下一个线程,这样就不会出现无法访问下一个锁了,估计跑出来也跑不了几个 多谢~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马