版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Phone_1070333541/article/details/78671414
【死锁模拟】
什么是死锁?
通俗来讲死锁就像两个人,一个人买东西,一个人卖东西,买东西的人说:你给我东西我给你钱,卖东西的人说:你给我钱我给你东西。这俩人杠上了,这个时候没有一个人来调解,这俩人谁都不会善罢甘休。
官方的话来说,两个线程发生了资源竞争,都在等对方释放资源,这时候如果没有外力因素就会一直等下去,接下来有一个例子来模拟死锁。
//提供公共的锁对象
class MyLock{
static MyLock lock1=new MyLock();
static MyLock lock2=new MyLock();
}
//死锁类实现
class DeadClock implements Runnable{
private boolean flag;
public DeadLock(){
}
public DeadLock(boolean flag){
this.flag=flag;
}
public void run(){
if(flag==true){
synchronized(MyLock.lock1){
syso("拿到了锁1");
synchronized(MyLock.lock2){
syso("拿到了锁1和锁2");
}
}
}else{
synchronized(MyLock.lock2){
syso("拿到了锁2");
synchronized(MyLock.lock1){
syso("拿到了锁2和锁1");
}
}
}
} //run
} //DeadLock
//测试类
public class MyTest{
main(){
DeadLock d1=new DeadLock(true);
DeadLock d2=new DeadLock(flase);
Thread t1=new Thread(d1);
Thread t2=new Thread(d2);
t1.start();
t2.start();
}
}
当然这是一个概率事件,多运行几次你就会发现,一个线程拿到锁1,另一个线程拿到锁2,这个时候程序没有结束,就发生了所谓的死锁现象,线程1等着线程2的锁,线程2等着线程1的锁。这就是小编所模拟的死锁,希望对大家有所帮助。