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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 芦青 中级黑马   /  2013-4-13 19:03  /  2272 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 芦青 于 2013-4-14 15:51 编辑

class Xc implements Runnable
{
        boolean bb=true;
        public void run()
        {
                  if(bb)
                {
                  
                        synchronized(Xc.class)
                        {
                                        System.out.println("Xc");
                                synchronized(this)
                                {
                                        System.out.println("this");
                                }

                        }
                  
                  
                }
         
                  
                else
                {
                 
                           synchronized(this)
                        {
                                        System.out.println("this");
                                synchronized(Xc.class)
                                {
                                        System.out.println("Xc");
                                }

                        }
                  
        
                }
           
         
        }
}

class Demo
{
        public static void main(String[] args)
        {
                Xc x=new Xc();
                Thread t1=new Thread(x);
                Thread t2=new Thread(x);
                t1.start();
                try{Thread.sleep(10);} catch(Exception e){}
                x.bb=false;
                t2.start();
               
        }
}

疑问:我这算死锁吗?  和毕老师有点不同,只有一个对象..和毕老师的创建2个对象,有啥不同的吗?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

8 个回复

倒序浏览
这个是死锁    你想看到死锁的效果的话 就分别在if   和else  里给同步代码块加上无限循环     这样就可以看到死锁的效果了
回复 使用道具 举报
这个是死锁,首先你用了两个锁,并且互相嵌套,符合死锁的条件;
回复 使用道具 举报
毕老师讲过   多线程中同步代码块嵌套时多线程在运行的过程中有可能和谐   你要我的锁没问题给你用   但是当我持有你要的锁不放你持有我要的锁不放   互不相让  就形成了死锁

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
这个是死锁,首先你用了两个锁,并且互相嵌套,符合死锁的条件,所以你这个是死锁。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

显然你的程序符合了

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
创建两个对象,那还叫对同一个资源使用多线程么???
回复 使用道具 举报
死锁必须要2个或者,2个以上的线程,才能产生哦,你创建了2个线程,但是只开启一个线程操作,这样锁不死的。
回复 使用道具 举报
黄玉昆 黑马帝 2013-4-14 14:11:15
9#
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马