黑马程序员技术交流社区

标题: s死锁的问题 [打印本页]

作者: 王涛    时间: 2012-6-24 21:10
标题: s死锁的问题
本帖最后由 王涛 于 2012-6-25 16:17 编辑

这个是那个死锁问题,输出应该是:

张三对李四说:“你给我画,我就把书给你”
李四对张三说:“你给我书,我就把画给你”

可是为什么一直没有出现死锁啊,输出的是:

张三对李四说:“你给我画,我就把书给你”
李四对张三说:“你给我书,我就把画给你”
张三得到画了
李四得到书了

谁能看看哪里出错了吗?谢谢了。
作者: 耿鑫    时间: 2012-6-24 21:19
呵呵 首先你和我同学是同一个名字 哈哈, 你的程序没有错误啊 我运行的时候很正常的,确实是死锁啊
作者: 张华廷    时间: 2012-6-24 21:27
涛,加油啊,赞一个
作者: 陆强强    时间: 2012-6-24 22:07
死锁看人品的,多运行几次试试
作者: 赵庆礼    时间: 2012-6-24 22:55
26.public class ThreadDeadLock implements Runnable
27.{
28.        private static Zhangsan zs = new Zhangsan();
29.
30.        private static Lisi ls = new Lisi();
31.
32.        private boolean flag = false;
33.        
34.        public void run()
35.        {
                while(true)
                {
36.                if(flag)
37.                {
38.                        synchronized(zs)
39.                        {
40.                                zs.say();
41.                                try
42.                                {
43.                                        Thread.sleep(500);
44.                                }
45.                                catch (InterruptedException e)
46.                                {
47.                                        e.printStackTrace();
48.                                }
49.                                synchronized(ls)
50.                                {
51.                                        ls.get();
52.                                }
53.                        }
                             flag = false;
54.                }else
55.                {
56.                        synchronized(ls)
57.                                {
58.                                        ls.say();
59.                                        try
60.                                        {
61.                                                Thread.sleep(500);
62.                                        }
63.                                        catch (InterruptedException e)
64.                                        {
65.                                                e.printStackTrace();
66.                                        }
67.                                        synchronized(zs)
68.                                {
69.                                        zs.get();
70.                                }
                                    flag = true;
71.                        }
72.                }
                 }
73.        }
74.
75.        public static void main(String[] args)
76.        {
77.
78.                ThreadDeadLock t1 = new ThreadDeadLock();
80.
83.
84.                Thread thA = new Thread(t1);
85.                Thread thB = new Thread(t1);
86.
87.                thA.start();
88.                thB.start();
89.
90.        }
91.}

代码改为上面的就行了,我试过了,你自己再试试




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