黑马程序员技术交流社区
标题:
线程问题
[打印本页]
作者:
张先庆
时间:
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