1.何为线程死锁?
当出现多个线程相互等待均不执行时就是线程死锁
2死锁出现在哪?
开发中一定要避免线程死锁,死锁经常出现在synchronized代码嵌套操作中
3.如何避免死锁?
不这样做就行了
package Lock2; /** * 线程死锁 * @author zhang * * */ public class Demo01_DeadLock { public static final Object LOCK1=new Object(); public static final Object LOCK2=new Object(); public static void main(String[] args) { MyDeadLock deadLock1 = new MyDeadLock(true); MyDeadLock deadLock2 = new MyDeadLock(false); deadLock1.start(); deadLock2.start(); } }
package Lock2; /** * 死锁代码 * @author zhang * */ public class MyDeadLock extends Thread{ boolean flag;//定义标记,用来指定要执行的代码 public MyDeadLock(boolean flag) { this.flag = flag; } @Override public void run() { if(flag){//flag赋值为true时,执行的代码 synchronized(Demo01_DeadLock.LOCK1){ System.out.println("if中锁1"); synchronized(Demo01_DeadLock.LOCK2){ System.out.println("if中锁2"); } } }else{//flag赋值为flase时,执行的代码 synchronized(Demo01_DeadLock.LOCK2){ System.out.println("else中锁2"); synchronized(Demo01_DeadLock.LOCK1){ System.out.println("else中锁1"); } } } } }