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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 些许 中级黑马   /  2014-12-24 01:19  /  893 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个java2个线程的死锁程序 ,跟到老毕编的,但是不知哪儿错了,反复的输出else locka else lockb死锁不了,看了很久了,纠结了很久了,求解脱
class Test5 implements Runnable
{
        private boolean flag;
        Test5 (boolean falg)
        {
                this.flag=flag;
       
        }
        public void run()
        {
               
                if (flag)
                {
                        while(true)
                        {
                                synchronized (MyLock.locka)
                                {
                                        System.out.println("if locka");
                                        synchronized(MyLock.lockb)
                                        {
                                                System.out.println("if lockb");
                                        }
                               
                                }
                        }
                       
                }
                else
                {
                        while(true)
                        {
                                synchronized (MyLock.lockb)
                                {
                                        System.out.println("else locka");
                                        synchronized(MyLock.locka)
                                        {
                                                System.out.println("else lockb");
                                        }
                               
                                }
                        }
                       
                }
               
        }



}
class MyLock
{
        static Object  locka =new Object();
        static Object  lockb =new Object();
       
}
public class Day11_15sisuo {
        public static void main(String[] args)
        {
               
                Thread t1=new Thread(new Test5(true));
               
                Thread t2=new Thread(new Test5(false));
               
                t1.start();
               
               
                t2.start();
               
               
        }

}

6 个回复

正序浏览
些许 中级黑马 2014-12-25 00:30:13
7#
常强儿 发表于 2014-12-24 10:00
程序没有问题,可以死锁的。
但是这个锁定了b却打印锁定a,下面相反

恩  看到了  看到没有报错 就没注意flag 写错了
回复 使用道具 举报

RE: 一个java死锁程序 ,死锁不了,求解脱


谢谢了   看到没有报错  就没发现flag写错了
回复 使用道具 举报

楼主在这里
回复 使用道具 举报
藐视你的boolean  flag  这个都没有确定具体的值,  if 这个代码都没有执行
回复 使用道具 举报
只需要创建一个Test5对象就可以了,不需要太多,你这样是创建两个对象了
回复 使用道具 举报
程序没有问题,可以死锁的。
但是这个锁定了b却打印锁定a,下面相反

上面的flag拼错了。
你要是有问题,可能是下面new的时候都是false吧


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