6张票,三人买,多线程java实现
时间: 2023-07-07 09:43:27 浏览: 57
以下是一个简单的多线程Java实现,假设票的编号从1到6:
```java
import java.util.ArrayList;
import java.util.List;
public class TicketSeller {
private static List<Integer> tickets = new ArrayList<>();
public static void main(String[] args) {
for (int i = 1; i <= 6; i++) {
tickets.add(i);
}
Thread buyer1 = new Thread(new Buyer("Buyer1"));
Thread buyer2 = new Thread(new Buyer("Buyer2"));
Thread buyer3 = new Thread(new Buyer("Buyer3"));
buyer1.start();
buyer2.start();
buyer3.start();
}
static class Buyer implements Runnable {
private String name;
public Buyer(String name) {
this.name = name;
}
public void run() {
while (!tickets.isEmpty()) {
synchronized (tickets) {
if (!tickets.isEmpty()) {
int ticket = tickets.remove(0);
System.out.println(name + " bought ticket " + ticket);
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
```
在这个实现中,我们使用了一个静态的tickets列表来存储票的编号。每个买家都是一个线程,并且它们会竞争tickets列表上的锁来购买票。在每个迭代中,如果tickets列表不为空,则买家会从列表中删除第一个元素,并打印出购买的票的编号。
注意,我们在访问tickets列表时使用了synchronized关键字来确保线程安全。这可以防止多个买家同时购买同一张票。