假设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒售出一张票。请模拟并打印出售票过程。注意使用synchronized确保同一张票只能卖出一次。java代码实现
时间: 2024-03-25 12:38:16 浏览: 144
好的,以下是Java代码实现:
```java
public class TicketSale {
private static int tickets = 1000;
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(10);
for (int i = 0; i < 10; i++) {
executor.execute(new TicketSeller(i));
}
executor.shutdown();
}
private static class TicketSeller implements Runnable {
private final int sellerId;
public TicketSeller(int sellerId) {
this.sellerId = sellerId;
}
@Override
public void run() {
while (tickets > 0) {
synchronized (TicketSale.class) {
if (tickets > 0) {
System.out.println("Seller " + sellerId + " sells ticket " + tickets--);
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
```
在上面的代码中,我们使用了一个静态变量`tickets`来记录还剩余的票数,同时使用了`ExecutorService`来创建10个线程模拟10个售票点。每个线程都是`TicketSeller`类的实例,每个实例有自己的售票点ID。在`run`方法中,我们使用`synchronized`来确保同一时刻只有一个线程可以卖出一张票。在卖出一张票后,线程会睡眠100毫秒,模拟售票的过程。当所有票都售完后,线程会退出。
阅读全文