由于多线程的同步问题,会导致线程在并发过程中处于等待(同步)状态,但是也有可能会由于多个线程在等待被对方线程所占有的资源释放时形成一个僵局,这就是死锁,模拟死锁:
public class DeathLock implements Runnable {
private Object obj1 = new Object();
private Object obj2 = new Object();
@Override
public void run() {
String name = Thread.currentThread().getName();
System.out.println("当前线程-->"+name);
if ("t1".equals(name)){
synchronized (obj1){
System.out.println("t1锁住了obj1");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj2){
System.out.println("t1执行结束!!!");
}
}
}
else {
synchronized (obj2){
System.out.println("t1锁住了obj2");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj1){
System.out.println("t2执行结束!!!");
}
}
}
}
public static void main(String[] args) {
DeathLock dl = new DeathLock();
Thread t1 = new Thread(dl,"t1");
Thread t2 = new Thread(dl,"t2");
t1.start();
t2.start();
}