java 中死锁问题的实例详解
发布时间:2020-05-23 09:26:48 所属栏目:Java 来源:互联网
导读:java中死锁问题的实例详解先看代码在做解释publicclassDeadLockimplementsRunnable{Stringa;
|
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){
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,false);
Thread t1=new Thread(d1);
Thread t2=new Thread(d2);
t1.start();
t2.start();
System.out.println("欢声笑语中打出GG");
}
}
以上是代码部分,如果没有死锁,可以在if下加while(true),必然死锁,下面来做说明。 这个仅仅是为了理解死锁和面试用的,创建两个对象a和b只是为了作为死锁的对象而用,线程t1运行(t1.start()),线程t1拿到锁a后,需要继续执行,拿到锁b,而线程t2运行(t2.start()),拿到锁b,想继续拿到锁a继续执行,这就形成死锁,互相持有对面所需要的锁对象。 如果面试,可以简单记下,两个线程,两个锁对象,锁互相嵌套,最少两种状态,同时执行,一次不行就多次,也可锁外面加循环,让线程多次运行,就会死锁,因为运行一次,可能存在偶然,第一个线程执行完了,锁对象释放了,第二个线程才进来执行,如此就有偶然现象。 如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持! (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
