Java 死锁的实现条件
当竞争资源或进程间推进顺序不当时,可能会出现死锁。
关于死锁出现的条件,我们晦涩难懂的操作系统课本是这样总结的:
1,互斥条件
2,请求和保持条件
3,不剥夺条件
4,环路等待条件
看了这些东西,很多人会感到一头雾水。如果你不是计算机专业科班出身并且成绩不赖的话,也许会很难理解。虽然这些总结非常精辟,但我总觉得国内大部分教材精辟过头了。在Java中,我们并不需要了解这么多细节的东西。死锁产生的原因很简单。线程1锁住资源A等待资源B,线程2锁住资源B等待资源A,两个线程都在等待自己需要的资源 而这些资源被另外的线程锁住,这些线程你等我,我等你,谁也不愿意让出资源,这样死锁就产生了。举一个形象的例子2个人(2个线程)要过一个独木桥(资源),两人走到中间停下来等另外一个人让路,不幸的是没有人愿意让路,于是两人就无限期的等下去了。
程序代码:
public class DeadLockTest implements Runnable ...{
public boolean flag = true;
static Object res1 = new Object();
static Object res2 = new Object();
public void run() ...{
if(flag) ...{
/**//* 锁定资源res1 */
synchronized(res1) ...{
System.out.println(\"Resource 1 is locked. Waiting for Resource 2.\");
try ...{
Thread.sleep(1000);
}
catch (InterruptedException e) ...{}
/**//* 锁定资源res2 */
synchronized(res2) ...{
System.out.println(\"Complete.\");
} [Page]
}
}
else ...{
/**//* 锁定资源res2 */
synchronized(res2) ...{
System.out.println(\"Resource 2 is locked. Waiting for Resource 1.\");
try ...{
Thread.sleep(1000);
}
catch (InterruptedException e) ...{}
/**//* 锁定资源res1 */
synchronized(res1) ...{
System.out.println(\"Complete.\");
}
}
}
}
public static void main(String[] args) ...{
DeadLockTest r1 = new DeadLockTest();
DeadLockTest r2 = new DeadLockTest();
r2.flag = false;
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
}
}
运行结果:
Resource 1 is locked. [Page]
Waiting for Resource 2.
Resource 2 is locked.
Waiting for Resource 1.
分享到:
相关推荐
java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁...
java 一个死锁的例子 java 一个死锁的例子 java 一个死锁的例子
Java中死锁的例子,非常的例子。经过本人验证
java线程实践,了解线程死锁,同步问题
线程池里的线程等待等待队列里的线程执行,等待队列里的等待线程池里的完成,相互等待
Java解决死锁问题eclipse代码版
java多线程死锁预防机制研究,java多线程死锁预防机制研究
Java多线程程序死锁检查 JCarder
本源代码是博客《Java 多线程编程之七:死锁(附源代码)》附带的实例性源代码。原博客链接地址:http://blog.csdn.net/defonds/archive/2010/01/26/5258120.aspx。
死锁在java 线程如何解决?这个实例描述了几个人资源共享的情况
什么情况下Java程序会产生死锁?如何定位、修复?pdf中有介绍
主要介绍了java线程死锁代码示例,分享了一个简单线程死锁的例子,需要的朋友可以参考下。
主要介绍了Java线程死锁实例及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Java死锁_动力节点Java学院整理,动力节点Java学院整理
java面试资料
主要介绍了 Java 线程死锁的问题解决办法的相关资料,希望通过本大家能帮助到大家,遇到类似问题能够解决,需要的朋友可以参考下
Java源码房门终于被打开了(解决死锁的方法).rar
死锁避免——银行家算法的模拟实现 java源代码 java源代码 java源代码 java源代码 java源代码
死锁and生产者消费者问题
源码—Java多线程5—死锁和wait notify notifyAll