火车售票系统以及改良版
synchronized是同步锁,当有一个线程访问上锁的代码块时,另一个线程无法访问代码块
/*** @author: Ren* @date: 2020-08-02 16:40* @description:*/
public class SellTickerSys {private int ticketleft = 10;private int ticketCount = ticketleft;private Object lock = new Object();public static void main(String[] args) {// 创建对象实例SellTickerSys sellTickerSys = new SellTickerSys();
// 创建售票窗口Seller seller = sellTickerSys.new Seller();Seller seller1 = sellTickerSys.new Seller();Seller seller2 = sellTickerSys.new Seller();new Thread(seller , "售票点一").start();new Thread(seller1 , "售票点二").start();new Thread(seller2 , "售票点三").start();}class Seller implements Runnable{@Overridepublic void run() {while (true) {synchronized (lock) {if (ticketleft > 0) {System.out.println(Thread.currentThread().getName() + "售出第" + (ticketCount + 1 - ticketleft) + "张车票");ticketleft--;try {// 模拟售票工作Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}}else{System.out.println("车票全部售完!");System.exit(0);
// 正常离开程序}}}}}
}
运行结果如下,大部分的票是售票口一售出
所以进行了小小的改良
/**
@author: Ren
@date: 2020-08-02 16:40
@description:
*/
public class SellTickerSys {
private int ticketleft = 10;
private int ticketCount = ticketleft;
private Object lock = new Object();public static void main(String[] args) {
// 创建对象实例
SellTickerSys sellTickerSys = new SellTickerSys();
// 创建售票窗口
Seller seller = sellTickerSys.new Seller();
Seller seller1 = sellTickerSys.new Seller();
Seller seller2 = sellTickerSys.new Seller();
new Thread(seller , “售票点一”).start();
new Thread(seller1 , “售票点二”).start();
new Thread(seller2 , “售票点三”).start();}
class Seller implements Runnable{
@Override
public void run() {
while (true) {
synchronized (lock) {
if (ticketleft > 0) {
System.out.println(Thread.currentThread().getName() + “售出第” + (ticketCount + 1 - ticketleft) + “张车票”);
ticketleft–;
}else{
System.out.println(“车票全部售完!”);
System.exit(0);
// 正常离开程序
}
try {
// 模拟售票工作
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
第二次·虽然解决了一直使用线程1的错误,但是也造成了逻辑上的错误,将模拟售票工作的主动睡眠挪到了外面,所以在思考后引进了线程池的技术解决这个问题,https://blog.csdn.net/weixin_44281922/article/details/107769068
火车售票系统以及改良版相关推荐
- c语言 feof_C语言 实现简单功能的12306火车售票系统【附源码】
本文福利在文末! 学习迷茫遇到问题了吗?现在关注微信公众号:C程序编程 免费获取进阶指导,资料工具以及源码 程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 录入班次信息 浏览班次信息 ...
- 火车售票系统 java_基于jsp的火车售票系统-JavaEE实现火车售票系统 - java项目源码...
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的火车售票系统, 该项目可用各类java课程设计大作业中, 火车售票系统的系统架构分为前后台两部分, 最终实现在线上 ...
- 火车票售票系统C语言大作业,基于C语言实现简单的12306火车售票系统
程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 录入班次信息 浏览班次信息 按班次号查询 按终点站查询 按余票数量排序保存 售票 退票 更新班次信息 退出系统 所有的班次信息保存在n ...
- JAVA_SSM火车售票系统订票(含论文)毕业设计【演示视频】
演示视频 JAVA 源码下载地址 JAVA_SSM火车售票系统订票(含论文)毕业设计,行业软件|毕业设计,Asp.net源码|- 51Aspx.com一.源码描述本系统基于SSM(Spring+Spr ...
- PHP火车购票系统,PHPC6051 火车售票系统
文件名大小更新时间 PHPC6051 火车售票系统02017-11-02 PHPC6051 火车售票系统\.DS_Store61482017-11-02 __MACOSX02018-03-15 __M ...
- 火车售票系统(基于UML的软件分析与设计模型建模实验)
火车售票系统(基于UML的软件分析与设计模型建模试验) 文章目录 火车售票系统(基于UML的软件分析与设计模型建模试验) 一.需求 二.UML用例图 三.UML类图 四.UML时序图 一.需求 实现一 ...
- pthread售票多窗口共同C语言,基于C语言实现简单的12306火车售票系统
程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 录入班次信息 浏览班次信息 按班次号查询 按终点站查询 按余票数量排序保存 售票 退票 更新班次信息 退出系统 所有的班次信息保存在n ...
- 火车售票系统(纯C语言)
这是好久之前写的一个火车售票系统, 写的非常粗糙, 后来也没改了, 希望遇见有缘人继续优化吧. 主要的功能是:设置车次,删除车次, 买票, 改签, 退票, 查询等. #include<stdio ...
- 火车售票系统c语言编程,基于C语言实现简单的12306火车售票系统.pdf
基基于于C语语言言实实现现简简单单的的12306火火车车售售票票系系统统 程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 入班次信息 浏览班次信息 按班次号查询 按终点站查询 按余票 ...
最新文章
- C++_vptr与vtbl,虚函数与虚表
- python+opencv图像拼接-python opencv 图像拼接的实现方法
- c语言strcat_s用于调用的参数太少_为什么系统调用会消耗较多资源呢
- linux 多线程编程笔记
- Visual Studio 快捷键汇总
- 上海民警这个方法让汽车提前“助跑”,路口通行效率提10%
- python RSA加密、解密、签名
- c语言牛顿方法,C语言编写牛顿迭代法的跟踪
- linux配置ssh免密钥登录
- oneday2mybatis下载
- 我是如何自学成为程序员的
- FNLP(FudanNLP)的安装及在eclipse中的使用
- opencv第九天pro
- 精美素材:10套最新出炉的免费扁平图标下载
- 小学计算机课教师教学笔记,小学信息技术教师读书笔记
- python跑一千万次循环要多久_进行一亿次MD5需要耗时多久?
- 内存管理pbuf.h头文件源码解析——LwIP学习
- 计算机兴趣班学什么好处,电脑兴趣班教学工作计划
- 百度商业系统大规模微服务分布式监控实践
- [Python从零到壹] 五十五.图像增强及运算篇之图像平滑(均值滤波、方框滤波、高斯滤波)