A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张先庆 中级黑马   /  2013-7-18 23:02  /  1309 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

以下是一个模拟订票业务的程序。BookingClerk类代表自动售票员,其中包含一个订票(booking)方法。假设一开始有10张票可预定。程序运行时产生两个订票客户同时自动向自动售票员订票。请问会出现什么错误?该如何修改?
public class Test
{   public static void main(String args[])
{   
BookingClerk bt = new BookingClerk();  
new BookingTest(bt, 7);  
new BookingTest(bt, 5);
}
}  
class BookingClerk {
int remainder = 10;  
void booking(int num) {  
if (num <= remainder) {  
  System.out.println("预定" + num + "张票");   
try {   
Thread.sleep(1000);   
} catch (InterruptedException e) {   
  e.printStackTrace();   
}   
remainder = remainder - num;
  } else {   
System.out.println("剩余票不够,无法预定");
  }   
System.out.println("还剩"+remainder+"张票");
}
}  
class BookingTest implements Runnable {
BookingClerk bt;  
int num;  
  BookingTest(BookingClerk bt, int num) {
  this.bt = bt;  
this.num = num;  
new Thread(this).start();
}   
public void run() {   bt.booking(num);   }
}

2 个回复

倒序浏览
我不太明白楼主这个代码的意思,7,5代表的是什么。
但是这里没加同步代码块,第一个线程有可能执行了一半就被第二个线程抢了资源。
所以其实会有很多种情况的,但是最后肯定会剩下-2张票的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马