线程同步之死锁问题
死锁问题:
线程间相互等待资源,而又不释放自身的资源,导致无穷无尽的等待,所以死锁问题是要避免的问题
死锁问题多出现在 同步代码块的嵌套前提下 所以尽量避免 同步代码块的嵌套,
Demo.java
public class Demo {
//这样就会导致死锁
public static void main(String[] args) {
DieLck d1 = new DieLck(true);
DieLck d2 = new DieLck(false);
d1.start();
d2.start();
}
}
MyLock.java
public class Demo {
public static void main(String[] args) {
DieLck d1 = new DieLck(true);
DieLck d2 = new DieLck(false);
d1.start();
d2.start();
}
}
DieLock.java
public class DieLck extends Thread {
public boolean flag ;
public DieLck(boolean flag) {
super();
this.flag = flag;
}
@Override
public void run() {
if(flag){
synchronized (MyLock.obj_A){
System.out.println("if中的A锁!");
synchronized (MyLock.obj_B){
System.out.println("if中的B锁!");
}
}
}else{
synchronized (MyLock.obj_B){
System.out.println("else中的B锁!");
synchronized (MyLock.obj_A){
System.out.println("else中的A锁!!");
}
}
}
}
}