java多线程售票窗口
时间: 2023-07-04 15:28:00 浏览: 46
好的,我可以为您介绍一下 Java 实现多线程售票窗口的方法。
在 Java 中,可以使用 Thread 类来创建一个新的线程。在售票窗口场景中,可以创建多个线程来模拟多个售票窗口同时售票的情况。
首先,需要定义一个 Ticket 类来表示一张票,包括票号和状态(是否已售出)。然后,创建一个 TicketSeller 类来模拟售票员,它继承自 Thread 类,可以重写 run() 方法来实现售票的逻辑。在 run() 方法中,可以使用 synchronized 关键字来确保多个线程不会同时操作同一个票。
下面是一个简单的示例代码:
```
public class Ticket {
private int ticketNo;
private boolean sold;
public Ticket(int ticketNo) {
this.ticketNo = ticketNo;
sold = false;
}
public int getTicketNo() {
return ticketNo;
}
public boolean isSold() {
return sold;
}
public void setSold(boolean sold) {
this.sold = sold;
}
}
public class TicketSeller extends Thread {
private List<Ticket> tickets;
private String name;
public TicketSeller(List<Ticket> tickets, String name) {
this.tickets = tickets;
this.name = name;
}
@Override
public void run() {
while (true) {
synchronized (tickets) {
// 找到未售出的票
Ticket ticket = null;
for (Ticket t : tickets) {
if (!t.isSold()) {
ticket = t;
break;
}
}
// 如果找到了未售出的票,则售出
if (ticket != null) {
ticket.setSold(true);
System.out.println(name + "售出了票:" + ticket.getTicketNo());
}
// 如果所有票都已售出,则退出
else {
System.out.println(name + "没有票可售,退出。");
break;
}
}
}
}
}
public class Test {
public static void main(String[] args) {
List<Ticket> tickets = new ArrayList<>();
for (int i = 1; i <= 100; i++) {
tickets.add(new Ticket(i));
}
TicketSeller seller1 = new TicketSeller(tickets, "售票员1");
TicketSeller seller2 = new TicketSeller(tickets, "售票员2");
TicketSeller seller3 = new TicketSeller(tickets, "售票员3");
seller1.start();
seller2.start();
seller3.start();
}
}
```
在这个示例中,创建了 100 张票,并创建了三个售票员线程来售票。每个售票员线程在 run() 方法中循环查找未售出的票,如果找到了则售出,并将票状态设置为已售出。如果所有票都已售出,则退出循环。
注意:这个示例只是一个简单的演示,实际应用中还需要考虑更多的细节,比如线程安全、并发性能等问题。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)