java多线程模拟买票问题 用图形用户界面

java多线程模拟买票问题 用图形用户界面,第1张

能详细说明一下买票按钮的功能是什么吗

程序有几个问题:

第一,maipiao类名要首字母大写,变量的定义尽量不要使用中文

第二,Sell A; 没有初始化,然后你就开始了调用

第三,public void actionPerformed(ActionEvent e),放在Maipiao类里面,什么时候被调用??

第四,多线程的public void run()方法,同样在Maipiao类中,可是它没有被调用

问题有不少,我实在修改不下去了,明天白天如果有空就帮你重写一个

终于给你修改完了,要的话留邮箱

package studymy;

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

Systemoutprintln("售票员: 现在开始售票,开放时间:10秒钟!");

Thread zhang = new Thread(new Zhang());

zhangstart();

Thread sun = new Thread(new Sun());

sunstart();

Thread zhao = new Thread(new Zhao());

zhaostart();

try

{

Threadsleep(10000);//主线程挂起10秒

}

catch (InterruptedException e)

{

eprintStackTrace();

}

Systemoutprintln("售票员: 今天的售票时间已过,请没有买到票的通知明天再来!");

if(zhangisAlive())

{

zhangstop();//如果thread1还存在则杀掉他

Systemoutprintln("张先生: 我没有买到票,明天再来吧!");

}

else

Systemoutprintln("张先生: 我买到票了!");

if(sunisAlive())

{

sunstop();//如果thread1还存在则杀掉他

Systemoutprintln("孙**: 我没有买到票,明天再来吧!");

}

else

Systemoutprintln("孙**: 我买到票了!");

if(zhaoisAlive())

{

zhaostop();//如果thread1还存在则杀掉他

Systemoutprintln("赵老师: 我没有买到票,明天再来吧!");

}

else

Systemoutprintln("赵老师: 我买到票了!");

}

}

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 > fiveNumber5+tenNumber10+twentyNumber20+5){

Systemoutprintln("售票员: 对不起,您的钱面值太大,找不开,请稍等!");

return false;

}

else if(receiveMoney < 5)

{

Systemoutprintln("售票员: 对不起,您的钱金额不足,请带足了再来!");

return false;

}

else{

if(receiveMoney == 5){

fiveNumber = fiveNumber +1;

Systemoutprintln("售票员: 收您5元,这是您的票,请您收好!");

return true;

}

else if(receiveMoney == 10 && fiveNumber > 0)

{

fiveNumber = fiveNumber - 1;

tenNumber = tenNumber + 1;

Systemoutprintln("售票员: 收您10元,找您5元,这是找您的钱和您的票,请您收好!");

return true;

}

else if(receiveMoney == 20 && fiveNumber > 0 && tenNumber > 0){

twentyNumber = twentyNumber + 1;

fiveNumber = fiveNumber - 1;

tenNumber = tenNumber - 1;

Systemoutprintln("售票员: 收您20元,找您15元,这是找您的钱和您的票,请您收好!");

return true;

}

return false;

}

}

}

class Zhang implements Runnable {

boolean isGetTicket = false;

Zhang()

{

}

public synchronized void run()

{

while(!isGetTicket){

Systemoutprintln("张先生: 我要买票,这是20元!");

if(TicketSellersellTicket(20)){

Systemoutprintln("张先生: 谢谢您。");

isGetTicket = true;

}else{

Systemoutprintln("张先生: 没关系,我去等待2秒!");

Systemoutprintln("售票员: 下一个!");

try

{

Threadsleep(2000);//挂起2秒

}

catch (InterruptedException e)

{

eprintStackTrace();

}

}

}

}

}

class Sun implements Runnable {

boolean isGetTicket = false;

Sun()

{

}

public synchronized void run()

{

while(!isGetTicket){

Systemoutprintln("孙**: 我要买票,这是10元!");

if(TicketSellersellTicket(10)){

Systemoutprintln("孙**: 谢谢您!");

isGetTicket = true;

}else{

Systemoutprintln("孙**: 没关系,我去等待1秒!");

Systemoutprintln("售票员: 下一个!");

try

{

Threadsleep(1000);//挂起1秒

}

catch (InterruptedException e)

{

eprintStackTrace();

}

}

}

}

}

class Zhao implements Runnable {

boolean isGetTicket = false;

Zhao(){

}

public synchronized void run()

{

while(!isGetTicket){

Systemoutprintln("赵老师: 我要买票,这是5元!");

if(TicketSellersellTicket(5)){

Systemoutprintln("赵老师: 谢谢您!");

isGetTicket = true;

}else{

Systemoutprintln("赵老师: 没关系,我去等待一下!");

Systemoutprintln("售票员: 下一个!");

try

{

Threadsleep(500);//挂起1秒

}

catch (InterruptedException e)

{

eprintStackTrace();

}

}

}

}

}

售票员: 现在开始售票,开放时间:10秒钟!

张先生: 我要买票,这是20元!

售票员: 对不起,您的钱面值太大,找不开,请稍等!

张先生: 没关系,我去等待2秒!

售票员: 下一个!

孙**: 我要买票,这是10元!

售票员: 收您10元,找您5元,这是找您的钱和您的票,请您收好!

孙**: 谢谢您!

赵老师: 我要买票,这是5元!

售票员: 收您5元,这是您的票,请您收好!

赵老师: 谢谢您!

张先生: 我要买票,这是20元!

售票员: 收您20元,找您15元,这是找您的钱和您的票,请您收好!

张先生: 谢谢您。

售票员: 今天的售票时间已过,请没有买到票的通知明天再来!

张先生: 我买到票了!

孙**: 我买到票了!

赵老师: 我买到票了!

楼上答案是正解,你一直用一个对象的在set,共享了同一个对象其实也没用新建5个对象

可以set之后就开始执行但是多线程的意义可能不大了

package comexperiment9;

public class Ticket extends Thread {

public Ticket(String s){

super(s);

}

int num=100; //静态变量

public void run(){

while(true){

synchronized (" "){ //同步块实现多线程

if(num>0){

try {

Threadsleep(500); //线程休眠10毫秒

}catch (Exception e){

eprintStackTrace();

}

Systemoutprintln(thisgetName()+"------------------------"+(num--));

}

}

}

}

public static void main(String[] args) { //main 函数

Ticket ticket =new Ticket("5号窗口");

Thread thread_5=new Thread(ticket);

ticketsetName("一号窗口");

thread_5start();

Thread thread_1=new Thread(ticket);

ticketsetName("二号窗口");

thread_1start();

Thread thread_2=new Thread(ticket);

ticketsetName("三号窗口");

thread_2start();

Thread thread_3=new Thread(ticket);

ticketsetName("四号窗口"); //为什么前面的set那么没用呢?

thread_3start();

Thread thread_4=new Thread(ticket);

thread_4start();

}

}

以上就是关于java多线程模拟买票问题 用图形用户界面全部的内容,包括:java多线程模拟买票问题 用图形用户界面、小弟急求一个JAVA编程答案(有运行结果)不胜感激!、java多线程问题,火车票买票等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10141987.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存