`
wuzq1223
  • 浏览: 25018 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java 多线程模拟多窗口卖票

    博客分类:
  • java
 
阅读更多

/*
* 多窗口实现卖票
*
* 实现多线程的第二种方式:实现Runnable接口,可以避免单继承的局限性
* 步骤:
* 1.定义类实现Runnable接口
* 2.覆写Runnable接口中的run方法
*   - run方法体中是线程将要运行的代码
* 3.通过Thread类建立线程对象,将Runnable接口的实现类作为参数实例化线程对象
* 4.调用Thread类的start方法开启线程并调用Runnable接口的子类的run方法
*
*/

class Ticket implements Runnable{

private int tick = 100;

private Object obj = new Object();
@Override
public void run() {
while(true){
synchronized(obj){
if(tick > 0){
try{
/* 模拟网络延迟,发现可能会输出0, -1, -2
* 问题原因:
* - 当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了部分,还没有执行完
* - 另一个线程也参与进来执行,导致共享数据错误
*
* 解决方法:
* - 对多条操作共享数据的语句,只能让一个线程进来执行,其他线程都不可以参与,只有当前线
* - 程执行结束了才能有其他线程进来执行
*
* 同步代码块:
* synchronized(对象){
*     需要被同步的代码块
* }
*
*/
Thread.sleep(30);
}catch(InterruptedException e){}
System.out.println(Thread.currentThread().getName() + " sale: " + tick--);
}
}
}
}

}

public class TicketTest {

public static void main(String[] args) {
Ticket t = new Ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
Thread t4 = new Thread(t);

t1.start();
t2.start();
t3.start();
t4.start();
}

}
分享到:
评论

相关推荐

    Java实验6多线程.doc

    在Java编程中,多线程是一项...通过这个实验,学生不仅能够掌握Java多线程的基本概念,还能了解到如何将多线程应用于实际问题中,比如网络聊天应用程序。这对于进一步学习Java的并发编程和大型系统设计是非常有益的。

    使用多线程技术,模拟通过四个窗口卖出1000张火车票的功能。

    本文将详细介绍如何使用Java多线程技术来模拟通过四个售票窗口出售1000张火车票的过程。 #### 多线程基础 多线程是指在一个程序中同时运行多个执行路径的技术。每个线程可以独立执行一部分任务,并与其他线程共享...

    多线程设计一个火车售票模拟程序

    通过本实验,我们学会了如何使用 Java 语言设计一个多线程的火车售票模拟程序。我们了解了多线程设计的重要性,并学习了如何使用 synchronized 关键字来实现线程同步。这个程序可以作为一个简单的示例,展示了多线程...

    java上机报告5——Java的多线程编程1

    该系统模拟了电影院三个售票窗口同时出售电影票的过程,通过 Java 多线程编程实现了多窗口同时出票、随机出票间隔和避免重复出售相同电影票的功能。 一、 Java 多线程编程概念 Java 多线程编程是指在同一个程序中...

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

    本示例“简单实现多线程同步示例(模拟购票系统)”旨在通过一个具体的实例,帮助开发者理解如何在Java中创建并管理多线程以及如何实现线程同步,确保数据的一致性和正确性。 首先,我们要明确多线程的基本概念。在...

    Java多线程模拟售票程序和线程安全问题

    Java多线程模拟售票程序和线程安全问题是Java编程中一个经典的实践项目,旨在模拟售票系统中多个窗口同时售票的场景。在这个项目中,我们可以学习到Java多线程编程的基本概念和线程安全问题的解决方案。 首先,让...

    java多线程、通信机制、Thread类以及Runnable接口间的使用实例

    1. 写两个线程,一个线程打印1-52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。...3.写一个程序,模拟4个售票窗口共同卖100张火车票的程序。 使用继承Thread类方式和实现Runnable接口两种方式实现。

    多线程 售票系统

    这个系统通过多线程来模拟现实中售票窗口的并发操作,提高系统效率,提供更好的用户体验。 **线程的创建** 线程是操作系统分配处理器时间的基本单位。在多线程环境中,每个线程都可以独立地执行任务。创建线程通常...

    Java多线程窗口售票问题实例

    Java多线程窗口售票问题实例 Java多线程窗口售票问题实例是Java多线程编程中的一种典型示例,用于演示多线程之间的同步问题。在这个示例中,我们创建了一个售票系统,多个窗口同时售票,需要确保每张票只能被售出一...

    javawork_java_火车票问题_thread_多线程编程_

    通过实践“火车票问题”,开发者可以深入理解Java多线程编程的概念、同步机制以及在实际场景中的应用。在实际开发中,正确使用多线程技术可以极大地提高程序的效率和响应速度,但同时也需要注意资源竞争和并发控制,...

    demo.rar_DEMO_java线程_个

    这个场景模拟了四个窗口(即四个线程)同时销售100张票的逻辑。 首先,我们需要理解Java中的线程是如何创建和管理的。在Java中,可以通过两种方式创建线程:继承`java.lang.Thread`类或者实现`java.lang.Runnable`...

    java模拟售票系统程序

    Java模拟售票系统程序是一种基于Java编程语言开发的教育性项目,旨在帮助学习者理解软件开发中的核心概念,如面向对象编程、多线程处理、数据存储以及用户界面设计。在这个系统中,通常会包含以下几个主要模块: 1....

    浅谈Java多线程的优点及代码示例

    Java多线程是一种编程技术,允许程序同时执行多个任务,从而提高资源利用率、简化程序设计并加快程序响应速度。在Java中,多线程通过创建线程对象来实现,每个线程代表程序中的一个独立执行流。 **资源利用率更好**...

    07-01 三个售票窗口同时出售20张票(并发)

    这个例子“07-01 三个售票窗口同时出售20张票(并发)”旨在探讨如何在多线程环境下实现并发销售,特别是针对售票系统的场景。在这样的系统中,并发处理能提高效率,但同时也引入了数据一致性的问题。 并发是指多个...

    Java 复习 练习题

    在`Cinema`类的`run()`方法中,每个线程代表一个售票窗口,循环检查当前线程名是否对应某个窗口,并判断是否有票可卖。如果满足条件,线程会尝试获取对象(即`Cinema`实例本身)的锁(通过`synchronized`关键字),...

    线程同步解决火车站售票问题

    初始化一个信号量为1000,代表1000张票,每个售票处在线程开始时尝试获取一个信号量,成功则可以卖票,结束后释放,这样可以保证不会卖出超过1000张票。 3. **条件变量**:条件变量允许线程在满足特定条件时阻塞...

    java 线程锁详细介绍及实例代码

    在Java编程语言中,线程同步是多线程环境下确保数据一致性的重要机制,而线程锁则是实现同步的关键工具。本文将深入探讨Java线程锁的使用、原理以及实例代码。 一、线程锁的概念与作用 线程锁,也称为互斥锁,主要...

    java火车售票

    在Java编程领域,火车售票系统是一个常用于演示多线程安全问题的经典案例。这个系统涉及到多个售票窗口(线程)同时处理购票请求,因此需要确保数据的一致性和完整性,防止出现资源竞争导致的错误。在这个场景下,...

    线程同步编程实例

    在多线程编程中,线程同步是一种控制多个线程并发执行的技术,以避免数据竞争和其他潜在的问题。本文将深入探讨线程同步的概念,并通过一个简单的“售票”实例来阐述如何在Java中实现线程同步。 线程同步的目的是...

    实验报告一+15130130273+石明皓1

    在本实验报告中,主题是Java并发程序设计,主要涵盖了两个多线程应用实例,一个是模拟四个售票窗口同时出售30张电影票,另一个是模拟两个人张三和李四通过同一账户在柜台和ATM机取钱。实验的目的是让学生理解和掌握...

Global site tag (gtag.js) - Google Analytics