死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象。
class ShareObject1{}
class ShareObject2{}
class Thread1 extends Thread{
@Override
public void run(){
synchronized(ShareObject1.class){
System.out.println("线程1获取到ShareObject1锁");
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
synchronized(ShareObject2.class){
System.out.println("线程1获取到shareObject2锁")
}
}
}
}
class Thread2 extends Thread{
public void run(){
synchronized(ShareObject2.class){
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("线程2获取到shareObject2锁");
synchronized(ShareObject1.class){
System.out.println("线程2获取到ShareObject1锁");
}
}
}
}
public class Test{
public static void main(String[] args){
new Thread1().start();
new Thread2().start();
}
}
发生死锁的主要原因是两个线程的请求资源顺序不合理,把 Thread2类中的ShareObject2.class和ShareObject1.class调换,两个线程采用同样的顺序获取就不会出现死锁