所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去
[color=orange]在两个或多个任务中,如果每个任务锁定了其他任务试图锁定的资源,此时会造成这些任务永久阻塞,从而出现死锁。例如:事务A 获取了行 1 的共享锁。事务 B 获取了行 2 的共享锁。
现在,事务 A 请求行 2 的排他锁,但在事务 B 完成并释放其对行 2 持有的共享锁之前被阻塞。
现在,事务 B 请求行 1 的排他锁,但在事务 A 完成并释放其对行 1 持有的共享锁之前被阻塞。
事务 B 完成之后事务 A 才能完成,但是事务 B 由事务 A 阻塞。该条件也称为循环依赖关系:事务 A 依赖于事务 B,事务 B 通过对事务 A 的依赖关系关闭循环。[/color]
java模拟死锁:
public class TestDealLock implements Runnable {
public int i = 1;
public static Object o1 = new Object();
public static Object o2 = new Object();
public void run() {
if(i == 1) {
synchronized (o1) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
synchronized (o2) {
System.out.println("1");
}
}
}
if(i == 0) {
synchronized (o2) {
try {
Thread.sleep(500);
} catch (Exception e) {
}
synchronized (o1) {
System.out.println("0");
}
}
}
}
}
测试死锁:
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
TestDealLock test1 = new TestDealLock();
TestDealLock test0 = new TestDealLock();
test1.i = 1;
test0.i = 0;
Thread t1 = new Thread(test1);
Thread t0 = new Thread(test0);
t1.start();
t0.start();
}
}
分享到:
相关推荐
java线程实践,了解线程死锁,同步问题
银行家避免死锁算法模拟实现Java版,SCNU计本同学严禁完全COPY,谢谢合作!
死锁避免——银行家算法的模拟实现 java源代码 java源代码 java源代码 java源代码 java源代码
仿真模拟银行家算法对死锁的避免
主要介绍了Java模拟死锁发生之演绎哲学家进餐问题,结合具体演绎哲学家进餐问题的案例形式详细分析了死锁机制与原理,需要的朋友可以参考下
(1) 设计一个3个并发进程共享3类不同资源的系统,进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源。 (2) 设计用银行家算法和随机分配算法,实现资源分配的两个资源分配程序,应具有显示或打印各...
下面小编就为大家带来一篇java多线程学习之死锁的模拟和避免(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
春节的时候去面试了一家公司,笔试题里面有一道是使用简单的代码实现线程的‘死锁’,当时没有想到这道题考的是Synchronized关键字,于是自己定义了两个资源模拟了一下。后面想想肠子都悔青了,于是自己在电脑上...
1、 对死锁避免中的银行家算法作进一步理解。 2、 加深理解死锁的概念。 3、 加深理解安全序列和安全状态的概念。 4、 通过编程,掌握银行家算法分配资源的一步步实现过程。
以下是Java编程模拟银行家算法的源代码,它包含了完整的实现,并且有详细的注释,非常适合作为实验报告的源代码使用。这段代码可以帮助大家理解银行家算法的原理和实现细节,以及如何在Java中实现这一算法。通过阅读...
提供了多种死锁检测和模拟的功能,如输入和输出系统的资源分配表,判断系统的状态是否安全,模拟系统的资源分配和回收过程,显示系统的安全序列等。本资源适合操作系统实践者和工程师使用,帮助他们通过Web界面来...
使用管程方式模拟哲学家就问题。 用一个输入变量控制是否有左撇子哲学家,如果有,其数量由随机数生成; 模拟程序分为两种情况: 1.可能发生死锁的情况; 2.没有死锁发生的情况。 可输出资源分配给哲学家的当前状态...
很好用,很容易看明白,通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地发生。
java线程 死锁 锁机制,java模拟生产者与消费者
完整的银行家算法 java 实现 完整的银行家算法 java 实现 完整的银行家算法 java 实现
当一组进程请求当前正被保留/分配给某些其他进程的相同资源时,就会发生死锁情况。 处于死锁状态的进程将等待大量时间,并且它们将永远不会终止其执行,并且该组... Java编程语言用于开发我们在本文中介绍的所有算法。
进程调度、银行家算法、页式地址重定位模拟、LRU 算法模拟和先来先服务算法代码 本文将对操作系统中进程调度、银行家算法、页式地址重定位模拟、LRU 算法模拟和先来先服务算法代码进行详细的解释和分析。 一、进程...
吉林大学操作系统课程设计(基于死锁避免动态策略的资源分配银行家算法的模拟实现) 利用Java实现了基本的算法和GUI界面,以及写了实验报告。 如果你成功获取了这个源码,可以联系我的QQ 2904184453来获取完整的实验...
不考虑死锁。 设备使用完后立即释放该设备资源。 7.存储管理 用链表模拟内存空间分配表。 系统区存放进程控制块和内存分配表。 用户区存放可执行文件。 8.进程管理 首先随机创建 10 个可执行文件来进行调度。 采用...
java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码...