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");
}
}
}
}
}