在多线程程序中死锁的一个令人头疼的问题,为了避免死锁就要避免死锁产生,就要知道死锁产生的条件
死锁产生的原因是同步嵌套,所以在开发过程中要尽量避免同步嵌套
下面是我的一个简单的同步死锁案例:
定义两个锁
class Lock{
public static Lock locka = new Lock();
public static Lock lockb = new Lock();
}
写一个线程
public class ThreadDemo4 extends Thread{
boolean flag ;
ThreadDemo4(boolean flag){
this.flag = flag;
}
@Override
public void run() {
//两个线程来回切换
if(flag){
while(true){
//同步嵌套
//locka嵌套lockb
synchronized (Lock.locka) {
System.out.println(Thread.currentThread().getName()+"...if locka");
synchronized (Lock.lockb) {
System.out.println(Thread.currentThread().getName()+"...else lockb");
}
}
}
}else{
while(true){
//同步嵌套
//lockb嵌套locka
synchronized (Lock.lockb) {
System.out.println(Thread.currentThread().getName()+"...if lockb");
synchronized (Lock.locka) {
System.out.println(Thread.currentThread().getName()+"...else lockb");
}
}
}
}
}
}
写一个测试类
class ThreadTest2{
public static void main(String[] args) {
ThreadDemo4 t1 = new ThreadDemo4(false);
ThreadDemo4 t2 = new ThreadDemo4(true);
t1.start();
t2.start();
}
}
运行后发现线程间互相抢夺资源,出现死锁的现象