Java多线程死锁

public class Test {
//创建两个程序都能共享的锁对象
static Object lock1=new Object();
static Object lock2=new Object();
public static void main(String[] args) {
//创建线程
Thread t = new Thread(new DeadLockThread(true));
Thread t2 = new Thread(new DeadLockThread(false));

t.start();
t2.start();

}

}


public class DeadLockThread implements Runnable {
//定义判断标志
public boolean flag;
//定义构造方法传入判断变量
public DeadLockThread(boolean flag){
this.flag=flag;
}
@Override
public void run() {
// TODO Auto-generated method stub

if(flag){

                        //线程1拥有lock1资源

synchronized (Test.lock1) {

System.out.println("get...lock1");

                             //线程1要访问lock2的资源,而lock2已被线程2拥有,线程1只能等待线程2释放才能访问,获得Lock2锁

synchronized (Test.lock2) {
System.out.println("get...lock2");
}
}

}else{

                        //线程2拥有lock2锁的资源

synchronized (Test.lock2) {

System.out.println("get...lock2");

                              //线程2要访问lock1的资源,而lock1被线程1拥有,线程2必须等待线程1执行完才能访问,导致lock1锁.

synchronized (Test.lock1) {
System.out.println("get...lock1");
}
}
}
}

}


最后运行结果:

    get...lock2

    get...lock1

线程1 lock2锁

线程2 lock1锁

猜你喜欢

转载自blog.csdn.net/sinat_29211659/article/details/80368840