黑马程序员技术交流社区

标题: 线程问题 [打印本页]

作者: 张先庆    时间: 2013-7-18 23:02
标题: 线程问题
以下是一个模拟订票业务的程序。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);   }
}

作者: "O_忆_O    时间: 2013-7-18 23:16
我不太明白楼主这个代码的意思,7,5代表的是什么。
但是这里没加同步代码块,第一个线程有可能执行了一半就被第二个线程抢了资源。
所以其实会有很多种情况的,但是最后肯定会剩下-2张票的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2