用java写一个多线程买票案例
时间: 2023-06-19 20:04:12 浏览: 116
这是一个简单的多线程买票案例:
```java
public class TicketSeller {
private static int tickets = 100;
public static void main(String[] args) {
SellerThread seller1 = new SellerThread("Seller1");
SellerThread seller2 = new SellerThread("Seller2");
seller1.start();
seller2.start();
}
static class SellerThread extends Thread {
private String name;
public SellerThread(String name) {
this.name = name;
}
@Override
public void run() {
while (tickets > 0) {
synchronized (TicketSeller.class) {
if (tickets > 0) {
System.out.println(name + " sells ticket " + tickets);
tickets--;
} else {
System.out.println(name + " has sold out");
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
```
在这个例子中,我们有一个售票员线程类 `SellerThread`,它从一个共享的票数变量中卖票。我们创建两个售票员线程 `seller1` 和 `seller2` 来模拟两个售票员同时卖票的情况。
为了避免售票员之间的竞争,我们使用了一个 synchronized 块来锁定共享变量 `tickets`,以确保每个售票员只能卖一个票。
我们在 `run` 方法中循环检查票数是否大于 0,如果是,则卖掉一张票并打印出来。如果票卖完了,则打印出售票员的名字和售罄的消息。我们使用 `Thread.sleep(100)` 模拟售票员卖票的时间。
阅读全文