多线程之售票问题!

byhsh 2010-04-21 05:29:40
运行结果只有一个售票窗口出票,是怎么回事?

class SaleTicket implements Runnable {
int tickets = 100;

public void run() {
while (tickets > 0) {
sale();

}
}

public synchronized void sale() {
if (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "卖第"
+ (100 - tickets + 1) + "张票"); //打印第几个线程正在执行
tickets--;
}
}

}

public class TestSaleTicket {

public static void main(String[] args) {
SaleTicket st = new SaleTicket();
Thread t1=new Thread(st, "一号窗口");
Thread t2=new Thread(st, "二号窗口");
Thread t3=new Thread(st, "三号窗口");
Thread t4=new Thread(st, "四号窗口");
Thread t5=new Thread(st, "五号窗口");
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
}
...全文
289 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
byhsh 2010-04-22
  • 打赏
  • 举报
回复
撒分了!
sharke118 2010-04-21
  • 打赏
  • 举报
回复
如果是售票功能的话 是不是每个窗口还要加入监听啊 有人买票 才调用对应窗口线程 做处理
无聊司马 2010-04-21
  • 打赏
  • 举报
回复
受用了
小弟在此谢了
shuanghuo9 2010-04-21
  • 打赏
  • 举报
回复
楼主真像我以前的女朋友啊!支持一下!
byhsh 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 goldenfish1919 的回复:]
因为你的CPU跑得太快了!

Java code

if (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "卖第" + (100 - tickets + 1) +

"张票"); //打印第几个线程正在执行
tickets--;
tr……
[/Quote]



谢谢了先

加入sleep后 可以多窗口了,只不过很多还是连续的窗口,就像一人买多张票!

bawgiitx 2010-04-21
  • 打赏
  • 举报
回复
public synchronized void sale() {
//加上延时
Thread.sleep(500);
yongweb 2010-04-21
  • 打赏
  • 举报
回复
正常呀,我的都是可以
WYhack 2010-04-21
  • 打赏
  • 举报
回复
你看他还是不是一个窗口买
WYhack 2010-04-21
  • 打赏
  • 举报
回复
try{
Thread.sleep(1);//稍微停一会
} catch(Exception e){}

多停一会吧,sleep(10000)
javaee_ssh 2010-04-21
  • 打赏
  • 举报
回复
我测试过,不会啊,其它窗口也在售票一号窗口卖第1张票.
一号窗口卖第2张票
一号窗口卖第3张票
一号窗口卖第4张票
一号窗口卖第5张票
一号窗口卖第6张票
一号窗口卖第7张票
一号窗口卖第8张票
一号窗口卖第9张票
一号窗口卖第10张票
一号窗口卖第11张票
一号窗口卖第12张票
一号窗口卖第13张票
一号窗口卖第14张票
一号窗口卖第15张票
一号窗口卖第16张票
一号窗口卖第17张票
一号窗口卖第18张票
一号窗口卖第19张票
一号窗口卖第20张票
一号窗口卖第21张票
一号窗口卖第22张票
一号窗口卖第23张票
一号窗口卖第24张票
一号窗口卖第25张票
一号窗口卖第26张票
一号窗口卖第27张票
一号窗口卖第28张票
一号窗口卖第29张票
一号窗口卖第30张票
一号窗口卖第31张票
一号窗口卖第32张票
一号窗口卖第33张票
二号窗口卖第34张票
一号窗口卖第35张票
二号窗口卖第36张票
一号窗口卖第37张票
二号窗口卖第38张票
一号窗口卖第39张票
二号窗口卖第40张票
三号窗口卖第41张票
四号窗口卖第42张票
五号窗口卖第43张票
二号窗口卖第44张票
三号窗口卖第45张票
四号窗口卖第46张票
五号窗口卖第47张票
一号窗口卖第48张票
三号窗口卖第49张票
四号窗口卖第50张票
五号窗口卖第51张票
一号窗口卖第52张票
三号窗口卖第53张票
四号窗口卖第54张票
五号窗口卖第55张票
一号窗口卖第56张票
三号窗口卖第57张票
四号窗口卖第58张票
五号窗口卖第59张票
一号窗口卖第60张票
二号窗口卖第61张票
三号窗口卖第62张票
四号窗口卖第63张票
一号窗口卖第64张票
二号窗口卖第65张票
三号窗口卖第66张票
四号窗口卖第67张票
一号窗口卖第68张票
二号窗口卖第69张票
三号窗口卖第70张票
四号窗口卖第71张票
五号窗口卖第72张票
二号窗口卖第73张票
三号窗口卖第74张票
一号窗口卖第75张票
四号窗口卖第76张票
五号窗口卖第77张票
二号窗口卖第78张票
三号窗口卖第79张票
一号窗口卖第80张票
四号窗口卖第81张票
五号窗口卖第82张票
三号窗口卖第83张票
一号窗口卖第84张票
二号窗口卖第85张票
五号窗口卖第86张票
四号窗口卖第87张票
一号窗口卖第88张票
二号窗口卖第89张票
五号窗口卖第90张票
四号窗口卖第91张票
一号窗口卖第92张票
二号窗口卖第93张票
五号窗口卖第94张票
四号窗口卖第95张票
一号窗口卖第96张票
二号窗口卖第97张票
三号窗口卖第98张票
四号窗口卖第99张票
五号窗口卖第100张票
ytsrd 2010-04-21
  • 打赏
  • 举报
回复
try{
Thread.sleep(1);//稍微停一会
} catch(Exception e){}
}
这个是停顿的命令是吧,受用了
gagucheng 2010-04-21
  • 打赏
  • 举报
回复
SaleTicket st = new SaleTicket();
多个这个类的实例化吧应该是
若鱼1919 2010-04-21
  • 打赏
  • 举报
回复
因为你的CPU跑得太快了!

if (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "卖第" + (100 - tickets + 1) +

"张票"); //打印第几个线程正在执行
tickets--;
try{
Thread.sleep(1);//稍微停一会
} catch(Exception e){}
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧