线程输出错误

sunxiasheng 2008-05-14 10:08:33
学习线程使用中遇到的问题。四个窗口(四个线程)同时售总共100张票。但是下面的代码输出的结果有少部分的重复,请高手指点。
class TicketsSystem
{
public static void main(String args[])
{
sellTickets mt = new sellTickets();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
}
}

class sellTickets implements Runnable
{
int tickets = 100;
public void run()
{
for(tickets = 100;tickets > 0; tickets--)
{
System.out.println(Thread.currentThread().getName() + "tickets:" + tickets);
}
}
}
...全文
39 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovingprince 2008-05-14
  • 打赏
  • 举报
回复
你这个写法有问题,四个线程都会重复很多次的,100张票是公共的,需要同步。


class TicketsSystem
{
public static void main(String args[])
{
sellTickets mt = new sellTickets();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
}
}

class sellTickets implements Runnable
{
int tickets = 100;
public void run()
{
while(true){
if(false==sellOneTicket())
break;//如果没有票了,则不卖了
}
}

//卖出了一张票则返回true,否则返回false
public synchronized boolean sellOneTicket(){
if(tickets>=1){
tickets--;
return true;
}
return false;
}
}



62,615

社区成员

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

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