黑马程序员技术交流社区
标题:
s死锁的问题
[打印本页]
作者:
王涛
时间:
2012-6-24 21:10
标题:
s死锁的问题
本帖最后由 王涛 于 2012-6-25 16:17 编辑
class Zhangsan
{
public void say()
{
System.out.println("张三对李四说:“你给我画,我就把书给你”");
}
public void get()
{
System.out.println("张三得到画了");
}
}
class Lisi
{
public void say()
{
System.out.println("李四对张三说:“你给我书,我就把画给你”");
}
public void get()
{
System.out.println("李四得到书了");
}
}
public class ThreadDeadLock implements Runnable
{
private static Zhangsan zs = new Zhangsan();
private static Lisi ls = new Lisi();
private boolean flag = false;
public void run()
{
if(flag)
{
synchronized(zs)
{
zs.say();
try
{
Thread.sleep(500);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
synchronized(ls)
{
zs.get();
}
}
}else
{
synchronized(ls)
{
ls.say();
try
{
Thread.sleep(500);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
synchronized(ls)
{
zs.get();
}
}
}
}
public static void main(String[] args)
{
ThreadDeadLock t1 = new ThreadDeadLock();
ThreadDeadLock t2 = new ThreadDeadLock();
t1.flag = true;
t2.flag = false;
Thread thA = new Thread(t1);
Thread thB = new Thread(t2);
thA.start();
thB.start();
}
}
这个是那个死锁问题,输出应该是:
张三对李四说:“你给我画,我就把书给你”
李四对张三说:“你给我书,我就把画给你”
可是为什么一直没有出现死锁啊,输出的是:
张三对李四说:“你给我画,我就把书给你”
李四对张三说:“你给我书,我就把画给你”
张三得到画了
李四得到书了
谁能看看哪里出错了吗?谢谢了。
作者:
耿鑫
时间:
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