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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© daoyua 中级黑马   /  2014-1-9 23:28  /  1241 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 daoyua 于 2014-1-10 16:28 编辑

class Demo implements Runnable
{
        int i;
        Demo(int i){this.i=i;System.out.println(this.i);}
        
        Object c=new Object();
        Object d=new Object();

        public   void run(){
                if(i==1)
                {
                        synchronized(c)
                        {
                                System.out.println("IFA");//try{Thread.sleep(10);}catch(Exception e){}
                                synchronized(d)
                                {
                                        System.out.println("IFB");
                                }
                        }
                }
                else
                {
                        synchronized(d)
                        {
                                System.out.println("ELSEA");
                                synchronized(c)
                                {
                                        System.out.println("ELSEB");
                                }
                        }
                }

        }
}
class Suo
{
        static Object a=new Object();
        static Object b=new Object();
}
class Test  
{
        public static void main(String args[])
        {
               
                Thread t1=new Thread(new Demo(1));
                Thread t2=new Thread(new Demo(2));
               
                t1.start();
                t2.start();
        }
}
输出结果全部打印了,为什么不是死锁
如果把同步代码块对象换成Suo.a和Suo.b就是死锁了,不懂原因

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

2 个回复

倒序浏览
你new了两个Demo 所有有两个c 和两个d 而Suo.a和Suo.b各有一个 如果你要用c和d的话就把它们都定义成static 这样应该没问题了

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
没有成死锁,原因肯定是用的锁不是同一把。
你在主函数中new出两个线程,并且每个线程中 又各自new了两个Object对象,创建了c和d两个变量去引用这两个对象,很明显这两个线程用的锁根本不一样,等于两个线程各自用各自的锁来开锁。
而用static修饰后,意味着它为该类的所有实例所共享,保证了唯一性。
所以调用Suo.a和Suo.b能成功

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马