问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

小弟急求一个JAVA编程答案(有运行结果截图)?不胜感激!

发布网友 发布时间:2022-05-27 03:16

我来回答

1个回答

热心网友 时间:2024-09-14 00:33

package study.my;

public class TicketSell {

/**
* @param args
* 多线程的同步控制与线程间的通信:
* 用synchronized、wait()和notifyAll()完成以下情景
* 模拟3个人排队买票,每人买一张票。售票员(TicketSeller类)只有1张5元的钱,电影票5元一张。
* 张某拿着1张20元的人民币排在第一,孙某拿着1张10元的人民币排在第二,赵某拿着1张5元的人民币排在第三。
* (提示:定义一个售票员TicketSeller类,属性包括5元钱张数fiveNumber、
* 10元钱张数tenNumber和20元钱张数twentyNumber,方法为同步方法卖票
* sellTicket(int receiveMoney), 创建三个线程张某Zhang、孙某Sun和赵某Zhao,
* 这三个线程共享一个售票员类对象。)
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("售票员: 现在开始售票,开放时间:10秒钟!");
Thread zhang = new Thread(new Zhang());
zhang.start();
Thread sun = new Thread(new Sun());
sun.start();
Thread zhao = new Thread(new Zhao());
zhao.start();
try
{
Thread.sleep(10000);//主线程挂起10秒
}
catch (InterruptedException e)
{
e.printStackTrace();
}
System.out.println("售票员: 今天的售票时间已过,请没有买到票的通知明天再来!");
if(zhang.isAlive())
{
zhang.stop();//如果thread1还存在则杀掉他
System.out.println("张先生: 我没有买到票,明天再来吧!");
}
else
System.out.println("张先生: 我买到票了!");

if(sun.isAlive())
{
sun.stop();//如果thread1还存在则杀掉他
System.out.println("孙小姐: 我没有买到票,明天再来吧!");
}
else
System.out.println("孙小姐: 我买到票了!");
if(zhao.isAlive())
{
zhao.stop();//如果thread1还存在则杀掉他
System.out.println("赵老师: 我没有买到票,明天再来吧!");
}
else
System.out.println("赵老师: 我买到票了!");
}
}
class TicketSeller{
private static int fiveNumber = 1;
private static int tenNumber = 0;
private static int twentyNumber = 0;
public static boolean sellTicket(int receiveMoney){
if(receiveMoney > fiveNumber*5+tenNumber*10+twentyNumber*20+5){
System.out.println("售票员: 对不起,您的钱面值太大,找不开,请稍等!");
return false;
}
else if(receiveMoney < 5)
{
System.out.println("售票员: 对不起,您的钱金额不足,请带足了再来!");
return false;
}
else{
if(receiveMoney == 5){
fiveNumber = fiveNumber +1;
System.out.println("售票员: 收您5元,这是您的票,请您收好!");
return true;
}
else if(receiveMoney == 10 && fiveNumber > 0)
{
fiveNumber = fiveNumber - 1;
tenNumber = tenNumber + 1;
System.out.println("售票员: 收您10元,找您5元,这是找您的钱和您的票,请您收好!");
return true;
}
else if(receiveMoney == 20 && fiveNumber > 0 && tenNumber > 0){
twentyNumber = twentyNumber + 1;
fiveNumber = fiveNumber - 1;
tenNumber = tenNumber - 1;
System.out.println("售票员: 收您20元,找您15元,这是找您的钱和您的票,请您收好!");
return true;
}
return false;
}
}
}
class Zhang implements Runnable {
boolean isGetTicket = false;
Zhang()
{
}
public synchronized void run()
{
while(!isGetTicket){
System.out.println("张先生: 我要买票,这是20元!");
if(TicketSeller.sellTicket(20)){
System.out.println("张先生: 谢谢您。");
isGetTicket = true;
}else{
System.out.println("张先生: 没关系,我去等待2秒!");
System.out.println("售票员: 下一个!");
try
{
Thread.sleep(2000);//挂起2秒
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
}
class Sun implements Runnable {
boolean isGetTicket = false;
Sun()
{

}
public synchronized void run()
{
while(!isGetTicket){
System.out.println("孙小姐: 我要买票,这是10元!");
if(TicketSeller.sellTicket(10)){
System.out.println("孙小姐: 谢谢您!");
isGetTicket = true;
}else{
System.out.println("孙小姐: 没关系,我去等待1秒!");
System.out.println("售票员: 下一个!");
try
{
Thread.sleep(1000);//挂起1秒
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
}
class Zhao implements Runnable {

boolean isGetTicket = false;
Zhao(){

}
public synchronized void run()
{
while(!isGetTicket){
System.out.println("赵老师: 我要买票,这是5元!");
if(TicketSeller.sellTicket(5)){
System.out.println("赵老师: 谢谢您!");
isGetTicket = true;
}else{
System.out.println("赵老师: 没关系,我去等待一下!");
System.out.println("售票员: 下一个!");
try
{
Thread.sleep(500);//挂起1秒
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
}
运行结果:
售票员: 现在开始售票,开放时间:10秒钟!
张先生: 我要买票,这是20元!
售票员: 对不起,您的钱面值太大,找不开,请稍等!
张先生: 没关系,我去等待2秒!
售票员: 下一个!
孙小姐: 我要买票,这是10元!
售票员: 收您10元,找您5元,这是找您的钱和您的票,请您收好!
孙小姐: 谢谢您!
赵老师: 我要买票,这是5元!
售票员: 收您5元,这是您的票,请您收好!
赵老师: 谢谢您!
张先生: 我要买票,这是20元!
售票员: 收您20元,找您15元,这是找您的钱和您的票,请您收好!
张先生: 谢谢您。
售票员: 今天的售票时间已过,请没有买到票的通知明天再来!
张先生: 我买到票了!
孙小姐: 我买到票了!
赵老师: 我买到票了!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... 介绍几款2500元以前的手机 像素一定要高 其他的不做要求 近期想入手一部安卓手机,价格2200到2500左右…买HTC desire Z还是 三星... 笔记本忘记开机密码怎么办急死了 笔记本电脑屏幕开机锁忘记密码 怎么办?急死了 华硕笔记本电脑开机密码忘记了怎样找回?系统是Windows 7旗舰版... CSDN下载 http://download.csdn.net/detail/sun1234567start/... ...有句 the sun goes down,the sun start comes out-hit fm 里听的... 20分钟后太阳开始升起来了英语 when the sun start to set the sun starts shining的一般疑问句? sun start在代码里面是什么意思 《刑警队长》中有哪些台词让你印象深刻? 写下“李大白月下独酌,思乡之美绽花问。”的例句,谢谢大家。_百度知 ... 淘宝物品,知道单价如何计算成本 由智齿引起的牙龈肿痛是否是敏感菌引起的感染炎症 长智齿会感染什么细菌 智齿导致的牙龈肿痛是什么细菌感染的 在最里面的大牙后面牙根疼 ,连着咽口水就疼 是不是长智牙了_百度... 智齿冠周炎属什么细菌感染 国外访问学者申请材料有哪些? 育儿嫂证书在哪里考? ...多年后依然会告诉你、我爱你、一如既往”翻译成英语 男人爱你会有什么状态 想不通,谁能劝劝我 心一如既往的爱你,这句话谁能帮我翻译成英语,谢谢了 startsun星辰吉他产于哪里? 分别以D, T, S打头的单词有哪些? here are some photos of sports start :sun yang , delphi 现有一程序,要转换成繁体,请问有什么好的方法吗? sunflower start是什么意思 十分钟后太阳开始升起来的英文翻译要加come up start啥意思 防城港是鬼城吗 广西防城港怎么样 广西防城港好不好,去那边生活好嘛。为啥家里人说那边不好。 防城港这个地方的人怎么样 请问一下,广西财经学院防城港校区坏境怎样? 广西防城港人为什么都那么横?态度素质低下?不说全部,勿喷! 防城港是空城吗 广西防城港是个怎样的城市? 蚂蚁上树怎么烧 这是初音的什么软件或游戏!!求下载地址 假面骑士腰带游戏怎样下载 长春工业大学是专科和本科都有么?给我打电话说是要扩招,去以后是专科... 2273长春工业大学本科还是专科,今年还有征集志愿吗,急啊