JAVA多线程作业

作业要求:

1、 假设现在有一个售票员进行售票,票价为5元,初始状态:票数不限,票售员手中有1张10元钱;

2、 每来一个顾客买票,相当于是创建一个线程,注意,此时顾客共享的资源是售票员及其手中的钱;

3、 当一个顾客到达后相当于创建一个线程,创建该线程时有两个参数,一是线程名,也就是顾客的名字,二是顾客带的钱(规定顾客带的钱只能为5元,10元,20元和50元)。

4、 某一个顾客买票时,如果售票员无法找零,则让该顾客等待,如果某一个顾客买票成功,则唤醒所有等待的顾客。

5、 主线程中用一个死循环来实现持续售票,可提供选择,是继续售票还是终止。

售票员售票,票价5元一张,假设只有5元,10元,20元,50元和100元五种币种,售票员手上有若干钱(自己初始化),顾客会拿这一张(5元,10元,20元,50元中的一张)钱来购票,设计一个算法,根据售票员手上的钱和顾客拿的钱判断是否可以售票?

代码:

package cxx_Maipiao;public class Conductor implements Runnable{int  x[]=new int [5];private int bk=0;Conductor(){}//判断是否能找钱成功public boolean check(int money){int a[] =new int [5];System.arraycopy(x, 0, a, 0, 5);int needchange=money-5;if(needchange==0) return true;else{int tp=0;for(int i=4;i>=0;i--) {if(a[i]>0) {if(i==4) tp=100;else if(i==3) tp=50;else if(i==2) tp=20;else if(i==1) tp=10;else if(i==0) tp=5;while(needchange-tp>=0){needchange-=tp;a[i]--;if(a[i]<=0) break;}if(needchange==0) {System.arraycopy(a, 0, x, 0, 5);return true;}}}return false;}}@Overridepublic void run() {// TODO 自动生成的方法存根String sst=Thread.currentThread().getName();String sstr[]=sst.split("-");int money=Integer.valueOf(sstr[1]);if(bk==0) x[1]=1;synchronized(this){boolean fg=false;while(fg==false){String st=Thread.currentThread().getName();String str[]=st.split("-");money=Integer.valueOf(str[1]);//System.out.println(money+"qqqqqq");if(check(money)==true){System.out.println(Thread.currentThread().getName()+"买到票");if(money==5) x[0]++;else if(money==10) x[1]++;else if(money==20) x[2]++;else if(money==50) x[3]++;else x[4]++;for(int j=0;j<5;j++)System.out.print("x["+j+"] " +x[j]+"  ");System.out.println("");super.notifyAll();fg=true;bk=1;}else{try{System.out.println(Thread.currentThread().getName()+"没买到票");for(int j=0;j<5;j++)System.out.print("x["+j+"] " +x[j]+"  ");System.out.println("");super.wait();}catch(InterruptedException e){e.printStackTrace();}}}}}
}
package cxx_Maipiao;import java.util.Scanner;public class Test {public static void main(String[] args) {// TODO 自动生成的方法存根Conductor st=new Conductor();String name;Scanner input=new Scanner(System.in);int imoney,flag;flag=1;while(flag==1){System.out.println("input name:");name=input.next();System.out.println("input money");imoney=input.nextInt();Thread th=new Thread (st,name+"-"+imoney);th.start();System.out.println("1 continue; 0 end");flag=input.nextInt();}}}

写个博客防忘记~感谢xu zong 非常友好的代码非常“有耐心的”找bug​~~

JAVA多线程作业-多人买票相关推荐

  1. java多线程实现多人买票

    /*** 票类* @author 2018121205**/ public class Ticket {public int ticket = 100;//100张票/*** 买票的方法* @para ...

  2. Java知识点26——模拟12306买票过程、模拟龟兔赛跑的过程、静态代理例子

    模拟12306买票过程 共享资源,并发(线程安全) Web12306.java /*** 共享资源,并发(线程安全)* @author Administrator**/ public class We ...

  3. 多线程(并发)买票的案例详解同步代码块和同步方法 (复习)

    文章目录 前言 简单的原理: 队列+锁 常见的买票案例(线程安全:多个线程操作同一个数据.) 结果: 使用同步代码块或者同步方法(解决线程不安全的问题) 添加的方式一:synchronized 关键字 ...

  4. java多线程同步 多窗口卖票实例_java多线程之火车售票系统模拟实例

    1.前言 为了学习多线程共享与通信,我们模拟一个火车售票系统,假设有10张火车票,三个窗口(也就是三个线程)同时进行售票. 2.非同步代码 package com.tl.skyLine.thread; ...

  5. Java 多线程练习 三人共抢10张票 限制黄牛党只能抢到一张票

    |--需求说明 |--实现方式 在run()方法里面写一个while循环,循环体里面执行一个加过synchronized的方法,这个方法下面加一个判断语句,当线程名为"黄牛党"的时 ...

  6. Java多线程之龟兔赛跑和抢票

    一:引言 练习这个码主要是为了体验在实现 多线程的方式中 实现Runable接口的好处,其中之一 有共享资源 ,一个实现类但可以有多个代理 二:龟兔赛跑 package com.wyj.one; /* ...

  7. Java 多线程 南北多人过桥

    有一个南北走向的桥,南边有4人,北边有3人,分别让他们到达对面,桥只能容纳一人通过.显示出每个人的过桥状态. TestBridge.java class PersonPassBridge extend ...

  8. JAVA 多线程实现包子铺(买包子,吃包子)

    1 package baozi; 2 3 /* 4 生产者(包子铺)类:是一个 线程类,继承Thread 5 设置线程任务(run):生产包子 6 对包子 进行判断 7 true:有包子 8 包子铺调 ...

  9. java多线程-线程创建-线程池-java内存模型

    文章目录 ==多线程基础== 进程 线程 浏览器的进程和线程(案例) 线程的异步和同步 多线程的优势 ==多线程的实现方式== 第一种:继承Thread类 第二种:实现Runnable接口 第三种:通 ...

最新文章

  1. python从1到n出现了多少个1-【算法21】从1到n的正数中1的出现次数
  2. 实现小数据量和海量数据的通用分页显示存储过程
  3. 年月跨度_建筑结构丨国内跨度最大的张弦桁架工程——合肥滨湖国际会展中心二期首榀桁架滑移成功...
  4. fitbit手表中文说明书_我如何分析FitBit中的数据以改善整体健康状况
  5. python数据检索_python – Hachoir – 从组中检索数据
  6. 学习戴铭博文《从 ReactiveCocoa 中能学到什么?不用此库也能学以致用》的总结...
  7. python 返回函数 闭包_python中闭包Closure函数作为返回值的方法示例
  8. android 投屏原理图,什么是投屏功能,手机投屏原理介绍
  9. Mac下adb不能重启
  10. 软件项目管理经验点滴总结
  11. Appium连接夜神模拟器
  12. 硬核!地铁大数据客流分析系统
  13. Alexander Tropsha:AI从零自学设计新型药物分子,研究登Science子刊|42问AI与机器人未来...
  14. 微信端视频播放时防止被浏览器劫持的问题
  15. video添加第一帧作为播放前图片(此方法 已失效)
  16. Python-Tkinter 基础教程
  17. 常用的数据类型有哪些?简单数据类型与复杂数据类型之间的区别?
  18. Biopython使用4:PDB结构
  19. 值得收藏的6个OCR文字识别软件,帮你提升10倍工作效率
  20. C语言打开微信提示找不到文件,电脑提示系统找不到指定文件怎么办?

热门文章

  1. 大数据与海量数据的区别
  2. 自动化运维工具之pxe+kickstart
  3. SQL Server创建表语句介绍
  4. mac 工作生活常用快捷键
  5. python django项目进度管理平台
  6. 【34个PMP项目实战案例5】如何提高团队的配合度
  7. notepad++正则表达式
  8. 测试行业2018年报告总结
  9. 南京邮电大学2019-2020第二学年度微型计算机接口技术考试真题回忆
  10. 古典密码算法(移位密码算法、维吉尼亚算法)