Java 演示线程的死锁问题
1 package bytezero.deadlock; 2 3 /** 4 * 演示线程的死锁问题: 5 * 6 * 1.死锁的理解:不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃 7 * 自己需要的同步资源,就形成了线程的死锁 8 * 9 * 2.说明:出现死锁后,不会出现异常,不会出现提示,只是所有的线程的都处于阻塞的状态, 10 * 无法继续 11 * 我们使用同步时,要避免出现死锁。 12 * 13 * 解决方法: 14 * 专门的算法,原则 15 * 尽量减少同步资源的定义 16 * 尽量避免嵌套的同步 17 * 18 * 19 * @author Bytezero1·zhenglei! Email:420498246@qq.com 20 * create 2021-10-18 10:39 21 */ 22 public class ThreadTest { 23 public static void main(String[] args) { 24 25 StringBuffer s1 = new StringBuffer(); 26 StringBuffer s2 = new StringBuffer(); 27 28 new Thread(){ 29 @Override 30 public void run() { 31 synchronized (s1){ 32 33 s1.append("a"); 34 s2.append("1"); 35 36 try { 37 Thread.sleep(100); 38 } catch (InterruptedException e) { 39 e.printStackTrace(); 40 } 41 42 synchronized(s2){ 43 s1.append("b"); 44 s2.append("2"); 45 46 System.out.println(s1); 47 System.out.println(s2); 48 } 49 } 50 } 51 }.start(); 52 53 new Thread(new Runnable() { 54 @Override 55 public void run() { 56 synchronized (s2){ 57 s1.append("c"); 58 s2.append("3"); 59 60 try { 61 Thread.sleep(100); 62 } catch (InterruptedException e) { 63 e.printStackTrace(); 64 } 65 66 synchronized(s1){ 67 s1.append("d"); 68 s2.append("4"); 69 70 System.out.println(s1); 71 System.out.println(s2); 72 } 73 } 74 } 75 }).start(); 76 } 77 }
本文来自博客园,作者:Bytezero!,转载请注明原文链接:https://www.cnblogs.com/Bytezero/p/15419683.html