本文目录一览:
java多线程模拟买票问题 用图形用户界面
能详细说明一下买票按钮的功能是什么吗
程序有几个问题:
第一,maipiao类名要首字母大写,变量的定义尽量不要使用中文
第二,Sell A; 没有初始化,然后你就开始了调用
第三,public void actionPerformed(ActionEvent e),放在Maipiao类里面,什么时候被调用??
第四,多线程的public void run()方法,同样在Maipiao类中,可是它没有被调用
问题有不少,我实在修改不下去了,明天白天如果有空就帮你重写一个
终于给你修改完了,要的话留邮箱
java 多线程模拟火车售票系统问题
在synchronized(str) 里加一句 if(ticket 0) //判断是否有余票,没有余票还卖什么?
也就是这样:
package socket;
public class Test
{
public static void main(String [] args)
{
TestThread tt=new TestThread();
new Thread(tt).start();
new Thread(tt).start();
new Thread(tt).start();
new Thread(tt).start();
}
}
class TestThread implements Runnable
{
int ticket=10;
String str=" ";
public void run()
{
while(ticket0)
{
synchronized(str)
{
if(ticket 0 ) {
System.out.println(Thread.currentThread().getName()+":ticket "+ticket+" is saling");
ticket--;
}
}
}
}
}
你的while循环只是超出票数的循环,在同步里面还要有判断是否有票的条件.因为里面同步的时候除了一个线程在执行外,其它几个都在等待,而此时并没有跳出循环,当然会出现负数了.
当然把while判断放到同步代码里面去也可以.不过这样就没有超出票数的判断了,实际应用中应该有个超出票数的判断.. 例如 :for(int i=0;i100;i++) //同步检测 只有5张票,显示100张,实际上卖出的还是5张..用来检测同步是否正确...
java多线程模拟售票问题
结果是对的,每一个售票的线程都有自己票数,所以每个线程都会售出十张票;
如果你想让这五个售票线程只能售出十张票的话,那就
private static int Ticketnum=10;
//设置成静态变量,这样的话,他就不属于实例了,而是属于整个类了