java 中死锁问题的实例详解

网友投稿 260 2023-04-02


java 中死锁问题的实例详解

java 中死锁问题的实例详解

先看代码在做解释

public class DeadLock implements Runnable{

String a;

String b;

boolean flag;

public DeadLock(String a,String b,boolean flag){

this.a=a;

this.b=b;

this.flag=flag;

}

public void run(){

if(flag){

// while(true){

synchronized(a)cJGOw{

System.out.println("锁a");

synchronized(b){

System.out.println("锁b----");

}

}

// }

}else{

// while(true){

synchronized(b){

System.out.println("锁b");

synchronized(a){

System.out.println("锁a----");

}

}

// }

}

}

public static void main(String[] args){

String a=new String("a");

String b=new String("b");

DeadLock d1=new DeadLock(a,b,true);

DeadLock d2=new DeadLock(a,b,false);

Thread t1=new Thread(d1);

Thread t2=new Thread(d2);

t1.start();

t2.start();

System.out.println("欢声笑语中打出GG");

}

}

以上是代码部分,如果没有死锁,可以在if下加while(true),必然死锁,下面来做说明。

这个仅仅是为了理解死锁和面试用的,创建两个对象a和b只是为了作为死锁的对象而cJGOw用,线程t1运行(t1.start()),线程t1拿到锁a后,需要继续执行,拿到锁b,而线程t2运行(t2.start()),拿到锁b,想继续拿到锁a继续执行,这就形成死锁,互相持有对面所需要的锁对象。

如果面试,可以简单记下,两个线程,两个锁对象,锁互相嵌套,最少两种状态,同时执行,一次不行就多次,也可锁外面加循环,让线程多次运行,就会死锁,因为运行一次,可能存在偶然,第一个线程执行完了,锁对象释放了,第二个线程才进来执行,如此就有偶然现象。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:vue2.0开发入门笔记之.vue文件的生成和使用
下一篇:详解.vue文件中监听input输入事件(oninput)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~