1. 编程题
    采用多线程,模拟售票系统的售票和退票过程。编程要求如下:可售票的数量为一个固定值,当还有余票的时候可以售出票,如果没有余票了(票数为0),则必须等待退票后才能售出票。售票的时候不能退票,反之亦然。使用synchronized实现同步控制,并使用wait()和notify()实现线程之间的通信。
  1. 定义Tickets类(Tickets.java), 表示所有的票,Tickets类至少有1个域。
     一个域:票的数量(size)
     两个方法:退票方法和售票方法
//Ticket.java
public class Ticket {int rows;                   //票的总行数int columns;             //票的总列数 int total;                  //总票数=行数*列数int freeSeatNum;            //余票数量boolean isSelling;            //true表示正在售票;不售票时为false,则表示可以退票……//售票方法:售出num张票synchronized public void sellTicket(int num){… }//退票方法:退回num张票synchronized public void returnTicket(int num){…… }……
  1. 定义一个线程SellTicketThread类,售票线程;
  2. 定义一个线程ReturnTicketThread类,退票线程;
  3. 定义一个测试线程的主类TicketManagementSystem.java,分别创建售票和退票的线程对象,模拟多次(至少3次)售票和退票的过程。观察线程采用同步控制和不采用同步控制两种情况之下程序的运行情况,并将运行结果输出到屏幕上。
  4. 程序输出如下:
请输入行数:
4
请输入列数:
4
一共有16张票售票前余票:16; 想购票数:3
购买了3张票
售票后余票:13售票前余票:13; 想购票数:3
退票中,SellTicketThread Waiting...退了2张票
退票后余票:15售票中,ReturnTicketThread Waiting...
购买了3张票
售票后余票:12售票前余票:12; 想购票数:3
退票中,SellTicketThread Waiting...退了2张票
退票后余票:14售票中,ReturnTicketThread Waiting...
购买了3张票
售票后余票:11退了2张票
退票后余票:13

[答案源代码]

//Ticket.javapublic class Ticket {int rows;                  //票的总行数int columns;             //票的总列数 int total;                  //总票数=行数*列数int freeSeatNum;            //余票数量boolean isSelling;            //true表示正在售票;不售票时为false,则表示可以退票public Ticket(int a,int b) {rows=a;columns=b;total=rows*columns;freeSeatNum=total;}//售票方法:售出num张票synchronized public void sellTicket(int num){try {notify();if(freeSeatNum!=total){System.out.println("");System.out.println("售票中,ReturnTicketThread Waiting...");}else{System.out.println("售票前余票:" + freeSeatNum+";想购票数:3");}if(freeSeatNum > 0) //取票{freeSeatNum=freeSeatNum-num;System.out.println("购买了" +num+"张票");System.out.println("售票后余票:" +freeSeatNum);System.out.println();Thread.sleep(1000);wait();}else {notify();System.out.println("没有余票了");Thread.sleep(1000);wait();}}catch (InterruptedException e) {e.printStackTrace();}}//退票方法:退回num张票synchronized public void returnTicket(int num){try {notify();if((freeSeatNum+num)!=13){System.out.println("售票前余票:" + freeSeatNum+";想购票数:3");System.out.println("退票中,SellTicketThread Waiting...");System.out.println();}freeSeatNum=freeSeatNum+num;   System.out.println("退了"+num+"张票");System.out.println("退票后余票:"+freeSeatNum);Thread.sleep(1000);wait();//等待买票 }catch (InterruptedException e) {e.printStackTrace();}  }
}// SellTicketThread.javapublic class SellTicketThread extends Thread {private Ticket ticket;public SellTicketThread(Ticket ticket) {this.ticket = ticket;}public void run() {for(int i=0; i<3; i++){ticket.sellTicket(3);}}}// ReturnTicketThread.javapublic class ReturnTicketThread extends Thread {private Ticket ticket;public ReturnTicketThread(Ticket ticket){this.ticket = ticket;}public void run(){for(int i=0; i<3; i++){ticket.returnTicket(2);}}
}// TicketManagementSystem.java
import java.util.Scanner;
public class TicketManagementSystem {public static void main(String[] args) {System.out.println("请输入行数:");Scanner sc=new Scanner(System.in);int a=sc.nextInt();System.out.println("请输入列数:");Scanner sc2=new Scanner(System.in);int b=sc2.nextInt();sc.close();sc2.close();System.out.println();Ticket ticket = new Ticket(a,b);SellTicketThread t1=new SellTicketThread(ticket);ReturnTicketThread t2=new ReturnTicketThread(ticket);t1.start();t2.start();}
}

【Java】采用多线程,模拟售票系统的售票和退票过程。编程要求如下:相关推荐

  1. java计算机毕业设计模拟考试系统源代码+数据库+系统+lw文档

    java计算机毕业设计模拟考试系统源代码+数据库+系统+lw文档 java计算机毕业设计模拟考试系统源代码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软 ...

  2. Java——使用多线程模拟真实高并发业务并保证安全性(一)

    作者专注于Java.架构.Linux.小程序.爬虫.自动化等技术. 工作期间含泪整理出一些资料,微信搜索[javaUp],回复 [java][黑客][爬虫][小程序][面试]等关键字免费获取资料.技术 ...

  3. 基于java前行国家公务员模拟笔试系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java前行国家公务员模拟笔试系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java前行国家公务员模拟笔试系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部 ...

  4. 计算机毕业设计JAVA前行国家公务员模拟笔试系统mybatis+源码+调试部署+系统+数据库+lw

    计算机毕业设计JAVA前行国家公务员模拟笔试系统mybatis+源码+调试部署+系统+数据库+lw 计算机毕业设计JAVA前行国家公务员模拟笔试系统mybatis+源码+调试部署+系统+数据库+lw ...

  5. 6-4 多线程编程:使用多线程同步与通信,模拟实现售票系统的售票和退票过程。 (20 分)

    使用synchronized实现同步控制,并使用wait()和notify()实现线程之间的通信. 编程要求如下: 可售出票的数量为一个固定值(total),从键盘读入.当余票的数量足够出售时(余票数 ...

  6. java计算机毕业设计springboot+vue地铁站自动售票系统-火车票售票系统

    项目介绍 本系统是针对目前地铁站自动售票的实际需求,从实际工作出发,对过去的地铁站自动售票管理系统存在的问题进行分析,完善用户的使用体会.采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确 ...

  7. springboot+vue前后端分离java地铁站自动售票系统-火车票售票系统

    地铁站自动售票系统主要包括个人中心.地铁线路管理.站点管理.购票信息管理.乘坐管理.用户信息管理等多个模块.它使用的是前端技术:nodejs+vue+elementui 前后端通讯一般都是采取标准的J ...

  8. 服务器和售票系统,网上售票系统的开发与实现.doc

    网上售票系统的开发与实现 单位代码 01 学 号 分 类 号_ TP315 密 级 毕业 院(系)名称信息工程学院 专业名称 学生姓名 指导教师2010年5月日旅游景点网上售票系统的开发与实现 摘 要 ...

  9. 客运站售票系统(售票管理)

    开发工具与关键技术:VS.MVC 作者:何德润 撰写时间:2019.8.17 下面,我展示的是客运站售票系统中的售票管理模块,这个模块的主要功能是售票员对已报班的班次进行售票. 页面效果图如下: 售票 ...

  10. python+django地铁站自动售票系统-火车票售票系统

    地铁站自动售票系统主要包括个人中心.地铁线路管理.站点管理.购票信息管理.乘坐管理.用户信息管理等多个模块.它使用的是前端技术:nodejs+vue+elementui 管理员 用户 (1)登陆注册功 ...

最新文章

  1. 情商(实践版本,丹尼尔.戈尔曼)---阅读记录
  2. vue组件间的5种传值方式
  3. 怎么调整字段长短_木北造型:空气刘海卷发筒怎么用 木北造型告诉您
  4. Java内存缓存-通过Google Guava创建缓存
  5. 关于DSP开发的步骤
  6. 学习opencv 英文版_电子课本:苏教牛津译林 | 高中英语模块2,赶紧收藏学习吧...
  7. 皖西学院计算机协会组织部,皖西学院
  8. java 线程池 wait,Java 多线程 之 wait等待 线程实例
  9. java uuid静态方法_Java UUID的variant()方法和示例
  10. java布尔三目运算符_Java关系运算符,boolean运算符,三元运算符
  11. boolean类型默认值_【Java基础】还在问String属于什么数据类型
  12. sublime text 2 常用快捷键
  13. nagios监控php使用情况,给nagios增加监控当前php进程数的插件,并用pnp出图
  14. linux查看其他用户计划任务,Linux计划任务(crond、atd)
  15. linux qt程序崩溃_Qt程式异常崩溃处理技巧(Win)
  16. RNN梯度消失和爆炸的原因
  17. 服务器保密系统,泛微OA系统secWall保密方案之一:服务器端部署
  18. 推荐图书《周一清晨的领导课》
  19. 飞行CSS3导航菜单
  20. 我的世界服务器无限刷雪傀儡,《我的世界》四个刷怪技巧,雪傀儡的雪球用来对付烈焰人有奇效?...

热门文章

  1. Android 桌面小图标消息通知
  2. 计算机房管理员年度总结,机房管理员个人工作计划
  3. 打开chm文件提示错误mk:@MSITStore:(文件路径)的解决方法
  4. 2016ACM/ICPC亚洲区大连站 1006 Detachment 1004 A Simple Math Problem(求逆元)(数论)
  5. 基于python的GUI开发-tkinter库讲解
  6. movie计算机英语作文,My favorite movies英语作文
  7. 大家如何批量查询物流,分享最简单的方法
  8. 这些智能合约漏洞,可能会影响你的账户安全
  9. 以前诺基亚手机Wi-Fi为什么总被阉
  10. Xcode9下自动化编译错误