`

多线程:模拟追女孩共享数据,但不共享代码

 
阅读更多
/**
 * 
 * 
 * 	模拟一个场景:Meten和Eric同时喜欢上了一个妹妹Janet,这两个人就开始追了Eric追Janet的方式是牺牲色相,他追了50次,
 * Meten追Janet的方式用的是金钱, 他追了30次
 * 在追的过程中,如果打印meten的追女孩子的方式有一次是色相,那么这个程序就错了   
 * 或者如果打印Eric追女孩子的方式有一次是金钱,那么这个程序就错了
 * 提醒:共享数据,但不共享代码
 * @author 够潮
 *
 */
public class Demo15 {

	 /**
	  * 共享数据的时候,为了防止出现脏数据,应加锁
	  */

	public static void main(String[] args) {
		Janet j = new Janet();
		Eric e = new Eric(j,"Eric");
		Meten m = new Meten(j,"Meten");
		e.start();
		m.start();
	}

}
class Janet {
	/**
	 * 共享的数据
	 */
	String msg;
	
	public String getMsg() {
		return msg;
	}

	/**
	 * 对共享的数据进行加锁
	 * @param msg
	 */
	public synchronized void setMsg(String msg) {
		this.msg = msg;
		System.out.println(Thread.currentThread().getName()+"说:"+this.getMsg());
	}
	
	
}
class Meten extends Thread{
	Janet j;
	public Meten(Janet j, String name) {
		super(name);
		this.j = j;
	}
	
	public void run(){
		for( int i = 0; i < 30; i++ ){
			this.j.setMsg("使用金钱");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
}
class Eric extends Thread{
	Janet j;
	public Eric(Janet j,String name) {
		super(name);
		this.j = j;
	}
	
	public void run(){
		for( int i = 0; i < 50; i++ ){
			this.j.setMsg("牺牲色相");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}
}

 

0
2
分享到:
评论

相关推荐

    模拟多线程环境(源代码20130812)

    本文将深入探讨“模拟多线程环境(源代码20130812)”这一主题,包括多线程的概念、实现方式以及在模拟文件系统中的应用。 多线程是指在一个进程中同时执行多个线程,这些线程共享同一地址空间,能够并发地执行任务,...

    多线程导入excel 数据

    在Java编程中,多线程导入Excel数据是一项常见的任务,特别是在大数据处理和高并发场景下。...例如,文件`BigdataTest.java`可能是实现上述功能的一个测试类,通过它我们可以模拟并测试导入Excel数据的多线程场景。

    linux下多线程模拟实验

    在这个"Linux下多线程模拟实验"中,我们将深入探讨如何使用C语言在Linux环境下实现生产者-消费者问题,这是一个经典的线程同步问题。 生产者-消费者问题是多线程编程中的一个经典案例,主要用于演示如何通过共享...

    多线程实现的模拟QQ程序

    3. 线程同步:由于多线程环境下可能存在数据共享,因此需要使用同步机制如临界区、互斥量或信号量等来确保数据的一致性。在我们的聊天程序中,可能需要在更新消息队列时使用同步机制,防止数据竞争。 4. 线程结束:...

    银行取号模拟系统(多线程模拟实现)

    《银行取号模拟系统:多线程技术在VC中的应用》 银行取号模拟系统是一个典型的应用多线程技术的实例,它旨在模仿现实生活中银行客户取号、等待叫号和服务结束的流程。该系统使用Visual Studio 2005(VC)作为开发...

    中软卓越Java模拟面试课堂:97-多线程共享数据.pptx

    在Java编程中,多线程共享数据是一个非常重要的主题,特别是在并发编程中。这个主题涉及到线程安全、同步机制以及并发控制。让我们深入探讨一下Java中多线程共享数据的相关知识点。 首先,线程是操作系统分配CPU...

    模拟摄像头libuv支持多线程并发

    5. **同步与互斥量(Mutexes and Semaphores)**:在多线程环境中,为了保证数据的一致性和完整性,我们需要使用同步机制,如互斥量和信号量,来控制对共享资源的访问。 6. **错误处理和调试**:在多线程并发环境中,...

    vb模拟多线程 本地Timer对多线程

    综上所述,通过VB中的本地Timer可以模拟实现多线程的效果,虽然这并不是真正的多线程,但在某些简单场景下,它能提供一种可行的解决方案。然而,对于更复杂的多线程应用,如需要充分利用多核CPU,开发者可能需要转向...

    javascript模拟多线程

    总的来说,JavaScript模拟多线程是为了提升Web应用的性能和用户体验,尽管与传统的多线程有所不同,但通过合理利用各种技术,可以有效地处理复杂的并发任务。随着技术的发展,如WebAssembly的出现,未来JavaScript在...

    多线程客户端请求模拟

    在本场景中,"多线程客户端请求模拟"是指客户端程序利用多线程技术来并发地向服务器发送请求,以测试或模拟实际网络环境中的高并发情况。这种方式可以更真实地反映出服务器在大量并发请求下的性能表现,帮助开发者...

    Java 模拟线程并发

    除了基本的线程创建,Java还提供了synchronized关键字用于线程同步,防止多个线程同时访问共享资源导致数据不一致。synchronized可以修饰方法或代码块,当一个线程正在执行synchronized代码时,其他线程必须等待。 ...

    操作系统设计 多线程同步模拟(C++版)

    **多线程** 是指在一个进程中同时执行多个线程,这些线程共享进程的资源,如内存空间,但每个线程都有自己独立的执行流。多线程技术可以提高应用程序的响应速度和并发能力,尤其在GUI(图形用户界面)应用中,它可以...

    JAVA多线程实现数据库之间的数据互导、连接池、及多表插入数据库功能

    - **调试和优化**:通过模拟测试,观察多线程环境下数据互导的性能,对源码进行调优,提高数据传输速度和资源利用率。 6. **工具使用**: - **开发工具**:如IDEA、Eclipse等集成开发环境,辅助编写和调试Java...

    delphi 多线程模拟售票

    本教程将聚焦于使用Delphi这一强大的Windows应用程序开发工具来实现多线程,特别是模拟一个售票系统,以展示多线程如何在实际场景中应用。 Delphi是Borland公司(现Embarcadero Technologies)推出的一款集成开发...

    基于Linux C语言的多线程模拟智能家具服务器源代码

    在本项目中,我们关注的是一个基于Linux操作系统,使用C语言编写的多线程智能家具服务器的源代码。这个服务器程序旨在模拟智能家居环境中的设备控制,可能是为了学习、实验或开发目的。以下是对这个项目中涉及的技术...

    使用多线程模拟火车站售票系统

    在本文中,我们将深入探讨如何使用多线程技术来模拟火车站售票系统,主要涉及C++编程语言中的线程同步和Windows编程。多线程技术在处理并发任务时能显著提高程序效率,尤其在大型系统中,如火车站售票系统,它需要...

    基于Java多线程同步技术的简易模拟售票系统实现.pdf

    多线程同步技术的主要目的是解决线程间共享数据时可能出现的竞态条件(race condition),从而避免数据不一致的问题。在Java中,多线程同步可以通过synchronized关键字实现,该关键字可以用来修饰方法或代码块,确保...

    操作系统实验:多线程并发程序设计模拟生产者消费问题

    操作系统实验中的多线程并发程序设计是解决经典并发问题——生产者消费者问题的一种方式。生产者消费者问题是进程间通信和同步的经典案例,涉及到共享资源的访问控制和线程的协作。在这个实验中,我们将创建两个线程...

    简单实现多线程同步示例(模拟购票系统)

    线程同步是多线程编程中的关键概念,它防止了多个线程同时访问共享资源,避免了数据的不一致性,例如竞态条件和死锁。 在这个模拟购票系统中,我们可以设想有一个全局的票数变量。当多个用户同时尝试购买时,如果不...

    多线程ATM取款机模拟

    多线程ATM取款机模拟 在 Java 中实现多线程 ATM 取款机模拟,涉及到多个关键技术点,如线程安全、同步机制、账户管理等。本文将详细解释标题、描述、标签和部分内容中的知识点。 1. 多线程编程 多线程编程是 Java...

Global site tag (gtag.js) - Google Analytics