能详细说明一下买票按钮的功能是什么吗
程序有几个问题:
第一,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多线程问题,火车票买票等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)