面向面试的死锁问题
来源:互联网 发布:淘宝网冬季舞靴 编辑:程序博客网 时间:2024/06/05 08:44
先看代码在做解释
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,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只是为了作为死锁的对象而用,线程t1运行(t1.start()),线程t1拿到锁a后,需要继续执行,拿到锁b,而线程t2运行(t2.start()),拿到锁b,想继续拿到锁a继续执行,这就形成死锁,互相持有对面所需要的锁对象。如果面试,可以简单记下,两个线程,两个锁对象,锁互相嵌套,最少两种状态,同时执行,一次不行就多次,也可锁外面加循环,让线程多次运行,就会死锁,因为运行一次,可能存在偶然,第一个线程执行完了,锁对象释放了,第二个线程才进来执行,如此就有偶然现象。
阅读全文
0 0
- 面向面试的死锁问题
- 面试问题之线程同步和死锁
- Activemq死锁的问题
- 死锁的问题
- hibernate的死锁问题
- 一个死锁的问题
- 死锁的问题
- 死锁的有关问题
- Orcale死锁的问题
- 检查死锁的问题
- 线程死锁的问题
- 死锁问题的解决
- java面试遇到的问题一 -----面向对象的特点
- sql server死锁的问题
- sql server死锁的问题
- 死锁问题的代码(JAVA)
- 线程中死锁的问题
- 关于线程死锁的问题
- memcached操作
- CodeForces
- Unity渲染管线细节(Rendering Pipeline Details)
- 单向链表反转:迭代法和递归法
- 最长递增子序列问题---动态规划
- 面向面试的死锁问题
- App 适配 iOS 11
- 牛客网Java选择题的一些整理
- 栈是顺序存储的线性结构()
- 计算二叉树左叶子的和
- [容易] UVa OJ 10562 看图写树
- Python多进程——fork()
- sql语句执行过程详解
- 如何屏蔽双击选中文本