JAVA线程-死锁
.什么是死锁?
如果一个进程集合里面的每个进程都在等待这个集合中的其他一个进程(包括自身)才能继续往下执行,若无外力他们将无法推进,这种情况就是死锁,处于死锁状态的进程称为死锁进程。
.死锁的原因?
1.因竞争资源发生死锁 现象:系统中供多个进程共享的资源的数目不足以满足全部进程的需要时,就会引起对诸资源的竞争而发生死锁现象
2.进程推进顺序不当发生死锁
.死锁示例:public class Deadlock {
static Object obj1=new Object();
static Object obj2=new Object();
public static void fun1() {
synchronized(obj1){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":等待obj2的监视器");
fun3();
}
}
public static void fun3() {
synchronized(obj2){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":等待obj1的监视器");
fun1();
}
}
public static void main(String[] args) {
//匿名内部类实现线程启动
new Thread(){
public void run(){
fun1();
}
}.start();
new Thread(){
public void run(){
fun3();
}
}.start();
}
}
运行结果:运行一次后线程由于锁的对象,陷入相互等待对方释放锁。