题目内容

以下是一个模拟订票业务的程序。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);}}

查看答案
更多问题

当多个线程共享某个资源时,为了确保在任何时间点一个共享资源只被一个线程使用,避免造成数据的不一致,需要使用线程同步机制,线程同步有几种方式?分别如何实现?

为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?

现在有T1、T2三个线程,你怎样保证T2在T1执行完后执行?

Java中哪些方法会阻塞的线程

答案查题题库