`
嵇海波
  • 浏览: 14046 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

模拟java死锁

 
阅读更多
package multiThread;

/*
 *  死锁:死锁描述了这样一种情景,两个或多个线程永久阻塞,互相等待对方释放资源。
 *	当DeadLock运行后,两个线程极有可能阻塞,当它们尝试调用bowBack方法时。
 *	没有哪个阻塞会结束,因为每个线程都在等待另一个线程退出bow方法。 
 */
public class DeadLock {
	
	
	public static void main(String[] args){
		
		
		final Person person1 = new DeadLock().new Person("jihaibo");
		final Person person2 = new DeadLock().new Person("zhangxiaoyan");
		
		Thread thread1 = new Thread(new Runnable(){

			@Override
			public void run() {
				
				person1.bow(person2);
				
				/*while(true){
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					person1.bow(person2);
				}*/
				
			}
		});
		Thread thread2 = new Thread(new Runnable(){

			@Override
			public void run() {
				
				person2.bow(person1);
				
				/*while(true){
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					person2.bow(person1);
				}*/
			}
		});
		
		thread1.start();
		/*try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/
		thread2.start();
		
	}
	
	
	class Person {
		
		String name;

		public Person(String name) {
			super();
			this.name = name;
		}
	
		public String getName() {
			return name;
		}
		
		public void setName(String name) {
			this.name = name;
		}

		public synchronized void bow(Person friend){
			System.out.println(name + "给" + friend.getName() + "鞠躬");
			friend.bowBack(this);
			
		}
		
		public synchronized void bowBack(Person friend){
			System.out.println(friend.getName() + "给" + name + "回敬鞠躬");
		}
			
			
	}
	

}

 

分享到:
评论

相关推荐

    java模拟线程死锁

    Java 模拟线程死锁 线程死锁 在 Java 中,线程死锁(Deadlock)是一种特殊的情况,发生在两个或多个线程之间的互相等待对方释放资源的状态。这种情况下,各个线程都在等待其他线程释放资源,而自己也占用着其他...

    java 一个死锁的例子

    在"DeadLock.java"文件中,很可能会包含一个模拟死锁的示例代码。通常,这样的代码会创建两个或更多线程,每个线程会尝试获取一组锁,但顺序不同,从而导致死锁。例如: ```java class Resource { private int id;...

    银行家避免死锁算法模拟实现Java版

    《银行家算法避免死锁:Java模拟实现》 在多线程编程中,死锁是一个常见且严重的问题,它发生在两个或多个并发进程之间,每个进程都等待其他进程释放资源,从而导致所有进程都无法继续执行。银行家算法是解决死锁...

    java死锁问题

    Java死锁问题是一个在多线程编程中常见的复杂情况,它发生在两个或多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。理解并解决死锁是Java开发者必须掌握的关键技能之一,尤其是在构建高并发、多线程...

    死锁避免——银行家算法的模拟实现 java源代码

    在`Bank.jar`文件中,很可能包含了编译后的Java程序,用户可以通过运行这个jar文件来模拟银行家算法的执行过程,观察系统如何处理进程的资源请求,以及如何避免死锁。 银行家算法虽然能够有效地避免死锁,但它的...

    进程管理模拟(java)

    在这个Java实现的“进程管理模拟”项目中,我们可以深入理解进程的基本概念,以及如何通过编程来模拟这些概念。 首先,我们要知道在操作系统中,进程是程序在执行过程中的一个实例,它拥有独立的内存空间和执行状态...

    死锁算法 Java实现 操作系统

    本教程将通过Java实现死锁的模拟,帮助学习者理解这一复杂的概念,并提供一个简单的、易于理解的解决方案。 首先,我们需要了解死锁的四个必要条件: 1. **互斥条件**:资源必须被单个进程独占,即在同一时刻,...

    仿真模拟银行家算法对死锁的避免

    仿真模拟银行家算法对死锁的避免

    Java模拟死锁发生之演绎哲学家进餐问题案例详解

    Java模拟死锁发生之演绎哲学家进餐问题案例详解 Java模拟死锁发生之演绎哲学家进餐问题案例详解主要介绍了Java中模拟死锁发生之演绎哲学家进餐问题,结合具体演绎哲学家进餐问题的案例形式详细分析了死锁机制与原理...

    此次课程设计的主要内容是模拟实现资源分配。同时要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并使用适当的算法,有效的防止和避免死锁的发生。

    ### 一、模拟实现资源分配 #### 1. 背景介绍 在计算机科学领域中,操作系统必须管理多种资源(如内存、处理器时间等),并确保这些资源能被多个并发进程公平、有效地利用。资源分配不当可能会导致死锁等问题,这会...

    java线程死锁代码示例

    为了模拟死锁,我们使用 synchronized 块来锁住这两个资源,并在锁住的过程中进行 sleep 操作,以便模拟资源的占用。 5. synchronized 块的使用:在 Java 中,synchronized 块可以用来锁住一个对象,以便实现线程...

    死锁_Java产生死锁的简单案例

    在Java编程中,死锁是多线程编程中常见的一个问题,它发生在两个或多个线程因为争夺资源而陷入无法继续执行的状态。死锁的发生通常是因为线程A持有了资源B,而线程B又持有了资源A,导致两者都在等待对方释放资源。...

    Java 线程死锁的问题解决办法

    Java 线程死锁的问题解决办法 Java 线程死锁是指两个或两个以上的线程在执行过程中,相互等待对方释放资源,从而造成的僵持状态。在 Java 中,线程死锁的问题解决办法是非常重要的,下面我们将深入探讨 Java 线程...

    压力测试java模拟

    在这个“压力测试java模拟”项目中,我们重点探讨如何利用Java语言来构建压力测试工具和场景,以确保我们的应用程序在实际运行环境中能够稳定、高效地工作。 Java作为一款强大的多平台编程语言,提供了丰富的库和...

    Java操作系统课设之模拟进程管理系统

    在本项目"Java操作系统课设之模拟进程管理系统"中,我们主要探讨了如何利用Java编程语言来模拟实际操作系统中的进程管理功能。这是一个典型的计算机科学与技术领域的实践课题,旨在帮助学生深入理解操作系统的原理,...

    java模拟数据库事务

    Java模拟数据库事务主要涉及到几个关键知识点,这些知识点在软件开发中尤其在处理数据一致性与并发控制时至关重要。首先,我们来逐一深入理解这些技术。 1) **Socket编程**:Socket是网络通信的基础,它提供了进程...

    java 门锁终于被打开了(解决死锁)

    可能包含了模拟两个线程试图进入两个房间(代表两个锁)的场景,通过合理的锁管理来避免死锁。`Java.jpg`可能是配合代码的流程图或者类结构图,帮助理解代码逻辑。 总之,理解并掌握Java中的门锁机制和死锁解决方案...

    操作系统 核心算法模拟 java swing

    根据给定的文件信息,我们可以总结出以下关键的IT知识点,这些知识点主要集中在操作系统的核心算法模拟上,使用Java Swing作为图形用户界面的实现工具。 ### 1. 处理器调度算法 处理器调度是操作系统中的一项核心...

    基于java swing的多线程电梯调度模拟

    在这个电梯模拟中,电梯线程需要同步访问电梯状态和请求队列,以防止数据竞争和死锁问题。 Java 11作为开发环境,引入了一些新的特性和改进,例如局部变量类型推断(var关键字)、HTTP客户端API、JShell(即时...

Global site tag (gtag.js) - Google Analytics