死锁算法
不一样的线程分别占用对方须要的同步资源不放弃,都在等待对方放弃本身须要的同步资源,就造成了线程的死锁。app
出现死锁后,不会出现异常,不会出现提示,只是全部的线程都处于阻塞状态,没法继续ide
解决方法线程
专业的算法、原则code
尽可能减小同步资源的定义资源
尽可能避免嵌套同步同步
死锁的例子io
第一个线程锁住s1等待s2class
第二个线程锁住s2等待s1方法
package org.zhanghl; /* * 演示线程的死锁问题 * 1. * */ public class DeadLock { public static void main(String[] args) { StringBuffer s1=new StringBuffer(); StringBuffer s2=new StringBuffer(); new Thread(){ @Override public void run() { synchronized (s1){ s1.append("a"); s2.append("1"); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (s2){ s1.append("b"); s2.append("2"); System.out.println(s1); System.out.println(s2); } } } }.start(); new Thread(new Runnable() { @Override public void run() { synchronized (s2){ s1.append("c"); s2.append("3"); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (s1){ s1.append("d"); s2.append("4"); System.out.println(s1); System.out.println(s2); } } } }).start(); } }