Skip to content

Commit 8c56ec8

Browse files
删除冗余代码
1 parent 9f92931 commit 8c56ec8

File tree

9 files changed

+521
-521
lines changed

9 files changed

+521
-521
lines changed

01.并发编程的优缺点/并发编程的优缺点.md

Lines changed: 66 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -30,73 +30,73 @@
3030

3131
多线程编程中最难以把握的就是临界区线程安全问题,稍微不注意就会出现死锁的情况,一旦产生死锁就会造成系统功能不可用。
3232

33-
34-
public class DeadLockDemo {
35-
private static String resource_a = "A";
36-
private static String resource_b = "B";
37-
38-
public static void main(String[] args) {
39-
deadLock();
40-
}
41-
42-
public static void deadLock() {
43-
Thread threadA = new Thread(new Runnable() {
44-
@Override
45-
public void run() {
46-
synchronized (resource_a) {
47-
System.out.println("get resource a");
48-
try {
49-
Thread.sleep(3000);
50-
synchronized (resource_b) {
51-
System.out.println("get resource b");
52-
}
53-
} catch (InterruptedException e) {
54-
e.printStackTrace();
55-
}
56-
}
57-
}
58-
});
59-
Thread threadB = new Thread(new Runnable() {
60-
@Override
61-
public void run() {
62-
synchronized (resource_b) {
63-
System.out.println("get resource b");
64-
synchronized (resource_a) {
65-
System.out.println("get resource a");
66-
}
67-
}
68-
}
69-
});
70-
threadA.start();
71-
threadB.start();
72-
73-
}
74-
}
75-
33+
```java
34+
public class DeadLockDemo {
35+
private static String resource_a = "A";
36+
private static String resource_b = "B";
37+
38+
public static void main(String[] args) {
39+
deadLock();
40+
}
41+
42+
public static void deadLock() {
43+
Thread threadA = new Thread(new Runnable() {
44+
@Override
45+
public void run() {
46+
synchronized (resource_a) {
47+
System.out.println("get resource a");
48+
try {
49+
Thread.sleep(3000);
50+
synchronized (resource_b) {
51+
System.out.println("get resource b");
52+
}
53+
} catch (InterruptedException e) {
54+
e.printStackTrace();
55+
}
56+
}
57+
}
58+
});
59+
Thread threadB = new Thread(new Runnable() {
60+
@Override
61+
public void run() {
62+
synchronized (resource_b) {
63+
System.out.println("get resource b");
64+
synchronized (resource_a) {
65+
System.out.println("get resource a");
66+
}
67+
}
68+
}
69+
});
70+
threadA.start();
71+
threadB.start();
72+
73+
}
74+
}
75+
```
7676
在上面的这个demo中,开启了两个线程threadA, threadB,其中threadA占用了resource_a, 并等待被threadB释放的resource _b。threadB占用了resource _b正在等待被threadA释放的resource _a。因此threadA,threadB出现线程安全的问题,形成死锁。同样可以通过jps,jstack证明这种推论:
77-
78-
"Thread-1":
79-
waiting to lock monitor 0x000000000b695360 (object 0x00000007d5ff53a8, a java.lang.String),
80-
which is held by "Thread-0"
81-
"Thread-0":
82-
waiting to lock monitor 0x000000000b697c10 (object 0x00000007d5ff53d8, a java.lang.String),
83-
which is held by "Thread-1"
84-
85-
Java stack information for the threads listed above:
86-
===================================================
87-
"Thread-1":
88-
at learn.DeadLockDemo$2.run(DeadLockDemo.java:34)
89-
- waiting to lock <0x00000007d5ff53a8(a java.lang.String)
90-
- locked <0x00000007d5ff53d8(a java.lang.String)
91-
at java.lang.Thread.run(Thread.java:722)
92-
"Thread-0":
93-
at learn.DeadLockDemo$1.run(DeadLockDemo.java:20)
94-
- waiting to lock <0x00000007d5ff53d8(a java.lang.String)
95-
- locked <0x00000007d5ff53a8(a java.lang.String)
96-
at java.lang.Thread.run(Thread.java:722)
97-
98-
Found 1 deadlock.
99-
77+
```java
78+
"Thread-1":
79+
waiting to lock monitor 0x000000000b695360 (object 0x00000007d5ff53a8, a java.lang.String),
80+
which is held by "Thread-0"
81+
"Thread-0":
82+
waiting to lock monitor 0x000000000b697c10 (object 0x00000007d5ff53d8, a java.lang.String),
83+
which is held by "Thread-1"
84+
85+
Java stack information for the threads listed above:
86+
===================================================
87+
"Thread-1":
88+
at learn.DeadLockDemo$2.run(DeadLockDemo.java:34)
89+
- waiting to lock <0x00000007d5ff53a8(a java.lang.String)
90+
- locked <0x00000007d5ff53d8(a java.lang.String)
91+
at java.lang.Thread.run(Thread.java:722)
92+
"Thread-0":
93+
at learn.DeadLockDemo$1.run(DeadLockDemo.java:20)
94+
- waiting to lock <0x00000007d5ff53d8(a java.lang.String)
95+
- locked <0x00000007d5ff53a8(a java.lang.String)
96+
at java.lang.Thread.run(Thread.java:722)
97+
98+
Found 1 deadlock.
99+
```
100100

101101
如上所述,完全可以看出当前死锁的情况。
102102

0 commit comments

Comments
 (0)