什么是死锁:就是一个对象的锁被拿走之后一直无法释放
导致死锁的原因:两个或两个以上的线程共同访问两个相同的静态对象,相互之间产生了冲突
示例代码:
public class DeadLock {
public static void main(String[] args) {
new Thread(new Dead(0)).start();
new Thread(new Dead(1)).start();
}
}
class Dead implements Runnable{
private int id;
private static Object obj1=new Object();//备注:此处的静态保证不同的线程监控的是同一个对象才可以,否则达不到目的,obj2也是如此
private static Object obj2=new Object();
Dead(int id){
this.id=id;
}
public void run(){
if(id==0){
synchronized(obj1){
System.out.println("线程1拿到obj1对象锁");
System.out.println("-----------------------------");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(obj2){
System.out.println("线程1释放obj1对象锁");
System.out.println("线程1拿到obj2对象锁");
System.out.println("-----------------------------");
}
}
}
if(id==1){
synchronized(obj2){
System.out.println("--线程2拿到obj2对象锁-----");
System.out.println("-----------------------------");
synchronized(obj1){
System.out.println("--线程2释放obj2对象锁-----");
System.out.println("---线程2拿到obj1对象锁----");
System.out.println("-----------------------------");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}