Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21058
  • 博文数量: 10
  • 博客积分: 208
  • 博客等级: 入伍新兵
  • 技术积分: 125
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-15 16:00
文章分类

全部博文(10)

文章存档

2014年(1)

2012年(9)

我的朋友

分类: Java

2014-05-07 23:32:47

通过java多线程模拟火车售票,开始的错误程序
//售票类
class Runner implements Runnable{


private int Ticketnum=10;
int id;
Runner(int id){
this.id=id;
}
synchronized void SellTic(){
if(Ticketnum<=0){return;}
else {
System.out.println(Thread.currentThread().getName()+" sale "+Ticketnum--);
}
}
public void run(){
while(Ticketnum>0){
try{Thread.sleep(100);}catch(InterruptedException e){}; 
SellTic();
}
}
}
//测试类
public class Ticket {
public static void main(String args[]){
Thread t1 =new Thread(new Runner(1));
Thread t2 =new Thread(new Runner(2));
Thread t3 =new Thread(new Runner(3));
Thread t4 =new Thread(new Runner(4));
Thread t5 =new Thread(new Runner(5));
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();

}
}


输出结果五个线程没有共享Ticketnum变量,出现重复售票,错误原因在售票类中Ticketnum变量不是静态变量,即使值修改以后无法保留。改为,
private static int Ticketnum=10;问题解决
涉及线程共享问题要注意变量的全局性;

阅读(661) | 评论(0) | 转发(0) |
0

上一篇:微软移动潜伏:Xbox平台或成突围黑马

下一篇:没有了

给主人留下些什么吧!~~