用java编写程序用for循环来实现。假设有火车票100张,创建10个线程模拟10个售票点,每个售票点100毫秒卖一张票。打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。
时间: 2024-02-21 07:02:16 浏览: 70
好的,这是一个很好的多线程编程练习。下面是Java代码实现:
```java
public class TrainTicket {
private static int ticketCount = 100;
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(10);
for (int i = 0; i < 10; i++) {
executorService.execute(new TicketWindow(i + 1));
}
executorService.shutdown();
}
static class TicketWindow implements Runnable {
private int windowId;
public TicketWindow(int windowId) {
this.windowId = windowId;
}
@Override
public void run() {
while (ticketCount > 0) {
synchronized (TrainTicket.class) {
if (ticketCount > 0) {
System.out.println("售票点" + windowId + "卖出了第" + ticketCount-- + "张火车票");
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
```
这个程序使用了线程池来管理10个售票点的线程。在每个售票点的线程中,使用synchronized关键字来确保同一时间只有一个线程可以进入临界区,即卖票过程。
需要注意的是,在进入临界区之前,需要先判断是否还有票可卖,否则可能会出现负数或重复卖票的情况。在卖出每一张票后,线程会休眠100毫秒,模拟售票的时间消耗。
最后,当所有票都售完后,线程池会被关闭。
阅读全文