黑马程序员技术交流社区
标题:
多线程中的死锁问题
[打印本页]
作者:
HM代景康
时间:
2013-11-2 18:36
标题:
多线程中的死锁问题
1./* 2. * .死锁
3. * 同步中嵌套同步
4. * 也就是有两个房子,A和B,主人A 拿着B房间的锁,B主人拿着A房间的锁,A拿不到B的锁,就进不去房间
5. * 而B拿不到A的锁,也进不去房间,两人相持不下
6. * 死锁属于操作系统的概念了……其实很好理解。最经典的例子就是,You first,You first问题。
7. * 一个门,两个“中国人”,都很有礼貌,走碰头了,都想过这个门,两个人都谦让对方先过,结果是,谁也过不去……。
8. * 还有就是哲学家问题!说是四个哲学家坐在桌子上等着吃饭,每个人一边一根筷子,四个人四根筷子。
9. * 一个人拿到两根筷子的时候才能吃。否则等待…… ,有一种情况就是,四个人,每个人都拿了一根筷子,
10. * 还没有人放手。结果四个人都饿死……
11. *
12. *
13. * */
14.class Lock implements Runnable
15.{
16. private boolean flag;
17. public Lock(boolean flag)
18. {
19. this.flag=flag;
20. }
21. public void run()
22. {
23. if(flag)
24. {
25. while(true)
26. {
27. synchronized(MyLock.locka) //a锁中嵌套 b锁
28. {
29. System.out.println("if locka");
30. synchronized(MyLock.lockb)
31. {
32. System.out.println("if lockb");
33. }
34. }
35. }
36. }
37. else
38. {
39. while(true)
40. {
41. synchronized(MyLock.lockb) //b 锁中嵌套a锁
42. {
43. System.out.println("else lockb");
44. synchronized(MyLock.locka)
45. {
46. System.out.println("MyLock.locka");
47. }
48. }
49. }
50. }
51.
52. }
53.}
54.
55.class MyLock
56.{
57. static Object locka=new Object();
58. static Object lockb=new Object();
59.}
60.
61.
62.
63.public class LockDemo {
64.
65. public static void main(String[] args) {
66.
67. Thread lock1=new Thread(new Lock(false));
68. Thread lock2=new Thread(new Lock(true));
69. lock1.start();
70. lock2.start();
71. }
72.
73.}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2