假设有火车票100张,创建10个线程模拟10个售票点,每个售票点100毫秒卖一张票。打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。用java编写程序
时间: 2024-02-21 08:57:03 浏览: 106
好的,以下是代码实现:
```java
public class TicketSale implements Runnable {
private static int tickets = 100; // 总票数
private static int count = 0; // 已售票数
private static Object lock = new Object(); // 锁对象
private int id; // 售票点编号
public TicketSale(int id) {
this.id = id;
}
@Override
public void run() {
while (count < tickets) {
synchronized (lock) { // 加锁
if (count < tickets) {
count++; // 已售票数加1
System.out.println("售票点" + id + "售出第" + count + "张票");
}
}
try {
Thread.sleep(100); // 模拟售票过程
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// 创建10个售票点
for (int i = 1; i <= 10; i++) {
new Thread(new TicketSale(i)).start();
}
}
}
```
每个售票点都是一个线程,使用synchronized确保同一时刻只有一个售票点能够卖出一张票。在售票过程中,模拟了100毫秒的耗时。程序输出售票过程,直到所有票都售出为止。
阅读全文