java 多线程队列实例_java多线程模拟队列实现排队叫号
时间: 2023-11-01 10:59:18 浏览: 68
好的,下面是一个简单的 Java 多线程队列实例,模拟队列实现排队叫号的过程:
```java
import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class QueueExample {
private Queue<Integer> queue = new LinkedList<>();
private Lock lock = new ReentrantLock();
private int currentTicketNumber = 0;
public void addCustomer() {
lock.lock();
try {
queue.offer(currentTicketNumber++);
System.out.println("新顾客取得号码:" + (currentTicketNumber - 1) + ",当前队列长度:" + queue.size());
} finally {
lock.unlock();
}
}
public void serveCustomer() {
lock.lock();
try {
Integer ticketNumber = queue.poll();
if (ticketNumber == null) {
System.out.println("队列为空,无法叫号");
} else {
System.out.println("叫到号码:" + ticketNumber + ",当前队列长度:" + queue.size());
}
} finally {
lock.unlock();
}
}
public static void main(String[] args) {
final QueueExample queueExample = new QueueExample();
// 开启 5 个线程模拟 5 个顾客取号
for (int i = 0; i < 5; i++) {
new Thread(new Runnable() {
@Override
public void run() {
queueExample.addCustomer();
}
}).start();
}
// 开启 3 个线程模拟 3 个服务员叫号
for (int i = 0; i < 3; i++) {
new Thread(new Runnable() {
@Override
public void run() {
queueExample.serveCustomer();
}
}).start();
}
}
}
```
这个例子中,我们定义了一个 `QueueExample` 类,其中有一个 `queue` 队列,用于存储所有顾客的票号。我们使用 `ReentrantLock` 类来实现线程安全。在 `addCustomer` 方法中,我们通过 `offer` 方法往队列中添加一个顾客的票号,并输出当前队列长度以及新顾客的票号。在 `serveCustomer` 方法中,我们通过 `poll` 方法从队列中获取一个顾客的票号,并输出当前队列长度以及叫到的顾客的票号。
在 `main` 方法中,我们开启了 5 个线程模拟 5 个顾客取号,以及 3 个线程模拟 3 个服务员叫号。你可以运行这个例子来看一下具体的输出结果。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)