Java 多线程二:线程死锁 电玩女神 2022-05-17 22:11 262阅读 0赞 什么是线程的死锁?通俗点来说,不同线程等待对方先释放,互不释放资源,造成程序无法继续执行。 如下面一段程序: public class TestLock \{ static StringBuffer sb1=new StringBuffer(); static StringBuffer sb2=new StringBuffer(); public static void main(String\[\] args) \{ new Thread() \{ public void run() \{ synchronized(sb1) \{ try \{ Thread.currentThread().sleep(1000);//sb1握住锁等待10s,线程暂停 \} catch (InterruptedException e) \{ // TODO Auto-generated catch block e.printStackTrace(); \} sb1.append("A"); synchronized(sb2) \{ sb2.append("B"); System.out.println(sb1); System.out.println(sb2); \} \} \} \}.start(); new Thread() \{ public void run() \{ synchronized(sb2) \{ try \{ Thread.currentThread().sleep(1000);//sb2握住锁等待10s,线程暂停 \} catch (InterruptedException e) \{ // TODO Auto-generated catch block e.printStackTrace(); \} sb1.append("C"); synchronized(sb1) \{ sb2.append("D"); System.out.println(sb1); System.out.println(sb2); \} \} \} \}.start(); \} \} 以上程序执行结果: ![70][] 无任何输出,因为两个线程形成了死锁:在线程1中 sb1握住锁后停了10s,线程2中sb2也是握住锁停了10s 则他们互不放弃锁,程序没有办法往下执行,直接使线程挂掉,所以在写程序的时候,我们应当避免这种情况发生。 [70]: /images/20220518/811459842bb9402f9baef63c8ef9b552.png
还没有评论,来说两句吧...