package thread; import javax.swing.JFrame; public class Buy extends JFrame{ static SalesLady lady=new SalesLady(19,0,0); public static void main(String []args){ int money[]={10,10,5,10,5,10,5,5,10,5,10,5,5,10,5}; Thread thread[]=new Thread[20]; System.out.println("现在开始售票。。。"); for(int i=0;i<money.length;i++){ //创建money.length个顾客线程 thread[i]=new Thread(new Customer(i+1,money[i])); //顾客开始买东西 thread[i].start(); } //检查是否所有顾客都已买完东西 /*WhileLoop usage:*/ whileLoopFlag: while(true){ for(int i=0;i<money.length;i++){ if(thread[i].isAlive()){ continue whileLoopFlag; } } break; } System.out.println("售票结束了。"); } } /** * 售货员 * @author Administrator * */ class SalesLady{ int items;//商品数量 int fiveNum;//5角数量 int tenNum;//1元数量 private String response=""; /** * 创建售货员 * @param items 商品数量 * @param fiveNum 5角数量 * @param tenNum 1元数量 */ public SalesLady(int items,int fiveNum,int tenNum){ this.items=items; this.fiveNum=fiveNum; this.tenNum=tenNum; } public synchronized String ruleOfSale(int num,int money){ //synchronized(this); if(items==0){ return "已经卖完了"; } if(money==5){ fiveNum++; items--; response="给你一个纪念品,你的钱正好。"; } else if(money==10){ while(fiveNum<1){ try { System.err.println(""+num+"号顾客用10元购票,发生等待!"); this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } items--; fiveNum-=1; tenNum++; response="给你一个纪念品,你给了10元,找你5元。"; } //唤起等待的现场 this.notify(); return response; } } /** * 顾客 * @author Administrator * */ class Customer implements Runnable{ int num;//顾客编号 int money;//顾客使用的钱 public Customer(int num,int money){ this.num=num; this.money=money; } public void run() { try { Thread.sleep(300); System.out.println("我是"+num+"号顾客,我用"+money+"元购买纪念品,售货员说"+Buy.lady.ruleOfSale(num, money)); } catch (InterruptedException e) { e.printStackTrace(); } //System.out.println("我是"+num+"号顾客,我用"+money+"元购买纪念品,售货员说"+Buy.lady.ruleOfSale(num, money)); } }
发表评论
-
CSDN表情批量下载
2014-07-24 16:55 676CSDN评论时有很多有趣的表情,可以通过程序将这些表 ... -
南京地铁票价查询
2014-07-16 16:27 1007查看南京地铁各个站点间的距离 import java.io ... -
在指定路径下搜索含指定关键词的所有文件
2012-10-28 08:58 1116这个功能类似notepad++的文件搜索功能,如全词匹配“in ... -
java系统托盘
2012-07-20 22:43 987import java.awt.*; import j ... -
多线程实例
2012-07-20 22:08 773public class Class1 { publ ... -
读配置文件,传参数,打印message
2012-06-21 19:43 1070为了将来维护,message内容可能需要更改 ... -
java URLConnection
2012-05-27 13:36 1250package net; import java.ne ... -
java JFileChooser
2012-05-26 21:06 1074import java.io.*; import ... -
java Vector
2012-05-26 20:40 803import java.util.Vector; im ... -
java applet GUI 2D
2012-05-26 20:09 1070package applet; import java.aw ... -
java AdjustmentListener,Scrollbar的使用
2012-05-26 20:03 1047package gui.event; import j ... -
java TextListener的使用
2012-05-26 19:57 1520package gui.event; import ... -
多线程模拟测试网站并发性
2012-05-25 21:11 2919网站开发完了后,需要测试网站能支持多少用户并发访问,下面的j ... -
java 字节流使用
2012-05-21 14:04 1110package advance.test; import ... -
java通过apache的POI写EXCEL
2012-04-22 22:05 1978Apache POI是Apache 软件 基金会的开放 ... -
java全屏
2012-04-22 14:54 1092下面的代码演示了如何让JFrame全屏显示: impo ... -
JDBC-ODBC桥连接方式连接MS ACCESS,配置数据源
2012-04-22 13:59 1416下面是通过jdbc-odbc连接ms access数据库的一种 ... -
java获取系统相关信息
2012-01-12 22:12 1617下面的代码可以获取系统的环境变量,操作系统、处理器、编码和语言 ...
相关推荐
在Java编程中,多线程买票问题是演示并发控制的经典示例。这个问题旨在展示如何在多个线程共享同一资源(如票库存)时确保数据的一致性和正确性。以下是三种不同方法来解决这个问题: 1. **使用`synchronized`...
总结来说,这个多线程Java买票系统涵盖了Java线程编程的基础知识,包括线程创建、同步控制、线程池的使用以及并发问题的防范。通过分析和改进这个系统,可以深入理解Java多线程编程的原理和实践。
当多个线程尝试卖票时,它们会依次进入`sellTicket()`,避免了数据竞争的问题。 接下来,我们可以创建多个线程模拟购票过程: ```java public class ThreadTicketTest { public static void main(String[] args) ...
在synchronized代码块中,我们还使用Thread.sleep方法来模拟卖票过程中的延迟。 在main方法中,我们创建了一个SellTickets1对象,并启动了三个线程来卖票。每个线程都将卖票,直到票数小于等于0为止。 通过这个...
通过本实验,我们学会了如何使用 Java 语言设计一个多线程的火车售票模拟程序。我们了解了多线程设计的重要性,并学习了如何使用 synchronized 关键字来实现线程同步。这个程序可以作为一个简单的示例,展示了多线程...
在`sell()`方法内部,我们首先检查是否有票可卖,如果有,则让当前线程休眠10毫秒,模拟售票过程,并减少票数。 除此之外,还有一种同步块的方式,即`synchronized(obj)`。这里我们看到另一个线程在`b`为`true`时会...
在给定的"demo.rar_DEMO_java线程_个"压缩包中,我们可以看到一个关于Java线程使用的示例,特别是涉及到多窗口售票的场景。这个场景模拟了四个窗口(即四个线程)同时销售100张票的逻辑。 首先,我们需要理解Java中...
本示例“简单实现多线程同步示例(模拟购票系统)”旨在通过一个具体的实例,帮助开发者理解如何在Java中创建并管理多线程以及如何实现线程同步,确保数据的一致性和正确性。 首先,我们要明确多线程的基本概念。在...
Java多线程模拟售票程序和线程安全问题 Java多线程模拟售票程序和线程安全问题是Java编程中一个经典的实践项目,旨在模拟售票系统中多个窗口同时售票的场景。在这个项目中,我们可以学习到Java多线程编程的基本概念...
在Java编程中,多线程是一项重要的特性,它允许程序同时执行多个独立的任务,从而提高程序的并发性和效率。在Java实验6中,学生被要求将一对多的聊天程序改写为多线程的实现,这涉及到Java的并发处理和网络编程。 1...
在这个例子中,10个线程同时尝试卖票,如果不进行同步,就可能出现同一张票被多个线程卖出的问题。为了解决这个问题,使用了`synchronized`关键字来确保同一时间只有一个线程能访问共享资源——票数。这样就避免了...
该系统模拟了电影院三个售票窗口同时出售电影票的过程,通过 Java 多线程编程实现了多窗口同时出票、随机出票间隔和避免重复出售相同电影票的功能。 一、 Java 多线程编程概念 Java 多线程编程是指在同一个程序中...
Java线程同步是一种控制多个线程访问共享资源的方式,以避免数据不一致和并发问题。在给定的代码示例中,展示了两种线程同步机制:synchronized 方法和 synchronized 代码块。 首先,我们来看看 `synchronized` ...
1. **创建Java线程对象**:学习如何通过继承`Thread`类或实现`Runnable`接口来创建新的线程。 2. **改变线程状态**:了解线程生命周期中的不同状态(新建、就绪、运行、阻塞和终止),并掌握如何通过`start()`、`...
4. **多线程卖票问题**: - 这个例子可能模拟了一个售票系统,多个线程代表售票员,每个售票员都有自己的票库存。 - 非同步访问可能导致线程安全问题,例如“售票员卖出负数的票”。因此,必须使用同步机制,如`...
### 使用多线程技术模拟四个窗口卖出1000张火车票 在现代软件开发中,多线程技术被广泛应用于提高程序的并发处理能力,从而提升应用性能和响应速度。本文将详细介绍如何使用Java多线程技术来模拟通过四个售票窗口...
1. 写两个线程,一个线程打印1-52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。...3.写一个程序,模拟4个售票窗口共同卖100张火车票的程序。 使用继承Thread类方式和实现Runnable接口两种方式实现。
本文将深入探讨Java线程锁的使用、原理以及实例代码。 一、线程锁的概念与作用 线程锁,也称为互斥锁,主要用于控制多个线程对共享资源的访问,以避免并发执行时出现数据不一致的情况。当一个线程持有锁时,其他...
车票购票 每次产生20张票(由生产者线程完成),由3台售票机同时循环向外出票(售票机就是消费者线程),编写一个卖票模拟小系统 要求: 20张票卖完了,售票机就不能卖了,等有票才可以; 产生了20张票,要等票卖了一些...
本项目以"火车票问题"为例,展示了如何通过多线程来模拟3个售票窗口同时售票的过程。下面我们将深入探讨相关知识点。 1. **线程基础**: - 线程是操作系统中的基本执行单元,每个线程都有自己的程序计数器、栈和...