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 641CSDN评论时有很多有趣的表情,可以通过程序将这些表 ... -
南京地铁票价查询
2014-07-16 16:27 959查看南京地铁各个站点间的距离 import java.io ... -
在指定路径下搜索含指定关键词的所有文件
2012-10-28 08:58 1066这个功能类似notepad++的文件搜索功能,如全词匹配“in ... -
java系统托盘
2012-07-20 22:43 935import java.awt.*; import j ... -
多线程实例
2012-07-20 22:08 725public class Class1 { publ ... -
读配置文件,传参数,打印message
2012-06-21 19:43 990为了将来维护,message内容可能需要更改 ... -
java URLConnection
2012-05-27 13:36 1145package net; import java.ne ... -
java JFileChooser
2012-05-26 21:06 1037import java.io.*; import ... -
java Vector
2012-05-26 20:40 760import java.util.Vector; im ... -
java applet GUI 2D
2012-05-26 20:09 1018package applet; import java.aw ... -
java AdjustmentListener,Scrollbar的使用
2012-05-26 20:03 1004package gui.event; import j ... -
java TextListener的使用
2012-05-26 19:57 1461package gui.event; import ... -
多线程模拟测试网站并发性
2012-05-25 21:11 2877网站开发完了后,需要测试网站能支持多少用户并发访问,下面的j ... -
java 字节流使用
2012-05-21 14:04 1071package advance.test; import ... -
java通过apache的POI写EXCEL
2012-04-22 22:05 1912Apache POI是Apache 软件 基金会的开放 ... -
java全屏
2012-04-22 14:54 1044下面的代码演示了如何让JFrame全屏显示: impo ... -
JDBC-ODBC桥连接方式连接MS ACCESS,配置数据源
2012-04-22 13:59 1367下面是通过jdbc-odbc连接ms access数据库的一种 ... -
java获取系统相关信息
2012-01-12 22:12 1571下面的代码可以获取系统的环境变量,操作系统、处理器、编码和语言 ...
相关推荐
多线程买票是java中的一个经典案例,其主要思想无非包括2点,synchronized和锁,两者中,前者实现同步,后者为同步的线程提供锁,从而实现多个线程共享同一份资源时候,能够同步进行; 经典的方式是synchronized + 锁...
模拟多人不同面值购票找零的多线程代码(java版)模拟多人不同面值购票找零的多线程代码(java版)
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)实验报告,基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java...
java通过并发进程实现火车自动售票程序,假如火车站有100张火车票要卖出去,现在有5个售票点同时售票,用5个线程模拟这5个售票点的售票情况。
本篇文章给大家分享了Java多线程模拟售票程序和线程安全问题的相关知识点,对此有兴趣的朋友可以参考学习下。
模拟电影院的多线程购票系统,使用同步锁机制保证数据的安全,同时使用集合的减法来进行,顾客买票时选购位置
1. 写两个线程,一个线程打印1-52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。...3.写一个程序,模拟4个售票窗口共同卖100张火车票的程序。 使用继承Thread类方式和实现Runnable接口两种方式实现。
车票购票 每次产生20张票(由生产者线程完成),由3台售票机同时循环向外出票(售票机就是消费者线程),编写一个卖票模拟小系统 要求: 20张票卖完了,售票机就不能卖了,等有票才可以; 产生了20张票,要等票卖了一些...
二、ATM 系统使用的开发语言 人们在 ATM 系统的开发时,使用了各种不同的计算机语言,本系统采用 Java 语言作 为开发语言,因为 Java 语言是一个具有简单、面向对象、多线程、分布性、体系结构中 立、安全性等方面...
多线程实例,可创建任意多线程!本例子类似模拟卖火车票的流程,通过TRACE打印程序调试信息!
1.线程安全问题描述 线程安全产生情况的分析:(多线程访问了共享数据导致了线程安全问题... //设置线程任务:卖票 @Override public void run() { //使用死循环,让卖票操作重复执行 while(true){ //先判断票是否存在
编写程序,模拟车票销售系统。要求利用C/S模式,实现多网点销售,每个网点的基本功能为卖票和退票,能够实时显示票源情况。客户端使用GUI界面。