1.死锁的理解:
不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁。
2.说明:
* 1出现死锁后,不会出现异常,不会出现提示,只是所的线程都处于阻塞状态,无法继续。
* 2我们使用同步时,要避免出现死锁。
3. 举例
1 public static void main(String[] args) {
2
3 StringBuffer s1 = new StringBuffer();
4 StringBuffer s2 = new StringBuffer();
5
6 new Thread(){
7 @Override
8 public void run() {
9
10 synchronized (s1){
11
12 s1.append("a");
13 s2.append("1");
14
15 try {
16 Thread.sleep(100);
17 } catch (InterruptedException e) {
18 e.printStackTrace();
19 }
20
21
22 synchronized (s2){
23 s1.append("b");
24 s2.append("2");
25
26 System.out.println(s1);
27 System.out.println(s2);
28 }
29
30
31 }
32
33 }
34 }.start();
35
36
37 new Thread(new Runnable() {
38 @Override
39 public void run() {
40 synchronized (s2){
41
42 s1.append("c");
43 s2.append("3");
44
45 try {
46 Thread.sleep(100);
47 } catch (InterruptedException e) {
48 e.printStackTrace();
49 }
50
51 synchronized (s1){
52 s1.append("d");
53 s2.append("4");
54
55 System.out.println(s1);
56 System.out.println(s2);
57 }
58 }
59
60 }
61 }).start();
62 }