07-死锁问题

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 }

 

posted @ 2020-08-01 16:43  路修索  阅读(110)  评论(0编辑  收藏  举报