什么是死锁:
是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁
死锁产生的四个条件
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
案例:
import sun.security.krb5.internal.TGSRep;
public class Test14 implements Runnable {
public int flag=1;
static Object o1=new Object(), o2=new Object();
public static void main(String[] args) {
Test14 td1=new Test14();
Test14 td2=new Test14();
td1.flag=1;
td2.flag=0;
Thread t1=new Thread(td1);
t1.setName("线程一");
Thread t2=new Thread(td2);
t2.setName("线程二");
t1.start();
t2.start();
}
@Override
public void run() {
System.out.println("falg"+flag);
if(flag==1){
synchronized (o1) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"在执行操作");
synchronized (o2) {
System.out.println("1");
}
}
}
if(flag==0){
synchronized (o2) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"在执行操作");
synchronized (o1) {
System.out.println("0");
}
}
}
}
}