这是一条关于假设有火车票100张,创建10个线程模拟10个售票点的,每个售票点每个售票点100毫秒卖一张票的问题。在打印出售票过程中,注意使用synchronized确保同一张票只能卖出一次。
时间: 2024-02-21 12:02:29 浏览: 60
火车票售票系统 创建多线程
4星 · 用户满意度95%
好的,这是一个多线程编程问题。我们可以通过创建一个Ticket类来表示火车票,并在Ticket类中使用synchronized关键字来实现同步。下面是代码示例:
```java
public class Ticket {
private int ticketNumber;
private static int count = 0;
public Ticket() {
ticketNumber = ++count;
}
public synchronized void sell() {
System.out.println("售票点" + Thread.currentThread().getName() + "正在售出第" + ticketNumber + "张票");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
在上述代码中,我们使用了synchronized关键字来实现同步,确保同一张票只能被售出一次。sell()方法中的try-catch语句块模拟了售票的过程,每售出一张票就会暂停100毫秒。
接下来,我们可以创建10个线程来模拟10个售票点,每个线程都持有一个Ticket对象,并且不断地调用sell()方法来售票。下面是代码示例:
```java
public class SellTicket implements Runnable {
private Ticket ticket;
public SellTicket(Ticket ticket) {
this.ticket = ticket;
}
@Override
public void run() {
while (ticket != null) {
ticket.sell();
ticket = null; // 售票完成后将ticket置为null,结束线程
}
}
public static void main(String[] args) {
Ticket ticket = new Ticket();
for (int i = 1; i <= 10; i++) {
new Thread(new SellTicket(ticket), "售票点" + i).start();
}
}
}
```
在上述代码中,我们创建了一个SellTicket类,该类实现了Runnable接口,每个SellTicket对象持有一个Ticket对象。在run()方法中,每个线程不断地调用ticket.sell()方法来售票,直到所有的票都售出了。在main()方法中,我们创建10个线程,每个线程都持有同一个Ticket对象,模拟了10个售票点的情况。
希望这个代码示例能够解决你的问题。如果你还有其他问题,可以随时问我。
阅读全文