/**
*
*
* 模拟一个场景: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();
}
}
}
}
分享到:
相关推荐
本文将深入探讨“模拟多线程环境(源代码20130812)”这一主题,包括多线程的概念、实现方式以及在模拟文件系统中的应用。 多线程是指在一个进程中同时执行多个线程,这些线程共享同一地址空间,能够并发地执行任务,...
在Java编程中,多线程导入Excel数据是一项常见的任务,特别是在大数据处理和高并发场景下。...例如,文件`BigdataTest.java`可能是实现上述功能的一个测试类,通过它我们可以模拟并测试导入Excel数据的多线程场景。
在这个"Linux下多线程模拟实验"中,我们将深入探讨如何使用C语言在Linux环境下实现生产者-消费者问题,这是一个经典的线程同步问题。 生产者-消费者问题是多线程编程中的一个经典案例,主要用于演示如何通过共享...
3. 线程同步:由于多线程环境下可能存在数据共享,因此需要使用同步机制如临界区、互斥量或信号量等来确保数据的一致性。在我们的聊天程序中,可能需要在更新消息队列时使用同步机制,防止数据竞争。 4. 线程结束:...
《银行取号模拟系统:多线程技术在VC中的应用》 银行取号模拟系统是一个典型的应用多线程技术的实例,它旨在模仿现实生活中银行客户取号、等待叫号和服务结束的流程。该系统使用Visual Studio 2005(VC)作为开发...
在Java编程中,多线程共享数据是一个非常重要的主题,特别是在并发编程中。这个主题涉及到线程安全、同步机制以及并发控制。让我们深入探讨一下Java中多线程共享数据的相关知识点。 首先,线程是操作系统分配CPU...
5. **同步与互斥量(Mutexes and Semaphores)**:在多线程环境中,为了保证数据的一致性和完整性,我们需要使用同步机制,如互斥量和信号量,来控制对共享资源的访问。 6. **错误处理和调试**:在多线程并发环境中,...
综上所述,通过VB中的本地Timer可以模拟实现多线程的效果,虽然这并不是真正的多线程,但在某些简单场景下,它能提供一种可行的解决方案。然而,对于更复杂的多线程应用,如需要充分利用多核CPU,开发者可能需要转向...
总的来说,JavaScript模拟多线程是为了提升Web应用的性能和用户体验,尽管与传统的多线程有所不同,但通过合理利用各种技术,可以有效地处理复杂的并发任务。随着技术的发展,如WebAssembly的出现,未来JavaScript在...
在本场景中,"多线程客户端请求模拟"是指客户端程序利用多线程技术来并发地向服务器发送请求,以测试或模拟实际网络环境中的高并发情况。这种方式可以更真实地反映出服务器在大量并发请求下的性能表现,帮助开发者...
除了基本的线程创建,Java还提供了synchronized关键字用于线程同步,防止多个线程同时访问共享资源导致数据不一致。synchronized可以修饰方法或代码块,当一个线程正在执行synchronized代码时,其他线程必须等待。 ...
**多线程** 是指在一个进程中同时执行多个线程,这些线程共享进程的资源,如内存空间,但每个线程都有自己独立的执行流。多线程技术可以提高应用程序的响应速度和并发能力,尤其在GUI(图形用户界面)应用中,它可以...
- **调试和优化**:通过模拟测试,观察多线程环境下数据互导的性能,对源码进行调优,提高数据传输速度和资源利用率。 6. **工具使用**: - **开发工具**:如IDEA、Eclipse等集成开发环境,辅助编写和调试Java...
本教程将聚焦于使用Delphi这一强大的Windows应用程序开发工具来实现多线程,特别是模拟一个售票系统,以展示多线程如何在实际场景中应用。 Delphi是Borland公司(现Embarcadero Technologies)推出的一款集成开发...
在本项目中,我们关注的是一个基于Linux操作系统,使用C语言编写的多线程智能家具服务器的源代码。这个服务器程序旨在模拟智能家居环境中的设备控制,可能是为了学习、实验或开发目的。以下是对这个项目中涉及的技术...
在本文中,我们将深入探讨如何使用多线程技术来模拟火车站售票系统,主要涉及C++编程语言中的线程同步和Windows编程。多线程技术在处理并发任务时能显著提高程序效率,尤其在大型系统中,如火车站售票系统,它需要...
多线程同步技术的主要目的是解决线程间共享数据时可能出现的竞态条件(race condition),从而避免数据不一致的问题。在Java中,多线程同步可以通过synchronized关键字实现,该关键字可以用来修饰方法或代码块,确保...
操作系统实验中的多线程并发程序设计是解决经典并发问题——生产者消费者问题的一种方式。生产者消费者问题是进程间通信和同步的经典案例,涉及到共享资源的访问控制和线程的协作。在这个实验中,我们将创建两个线程...
线程同步是多线程编程中的关键概念,它防止了多个线程同时访问共享资源,避免了数据的不一致性,例如竞态条件和死锁。 在这个模拟购票系统中,我们可以设想有一个全局的票数变量。当多个用户同时尝试购买时,如果不...
多线程ATM取款机模拟 在 Java 中实现多线程 ATM 取款机模拟,涉及到多个关键技术点,如线程安全、同步机制、账户管理等。本文将详细解释标题、描述、标签和部分内容中的知识点。 1. 多线程编程 多线程编程是 Java...