用java使用Deque创建一个存放整数的队列。 创建一个生产者线程,每隔M毫秒往队列的尾部加入一个整数,所放的整数依次为1、2、3、…。 创建2个消费者线程,每隔N毫秒从队列的头部取出一个整数,并将其打印出来。
时间: 2024-04-29 16:23:47 浏览: 18
以下是一个可能的解决方案:
```java
import java.util.Deque;
import java.util.LinkedList;
public class QueueDemo {
private static final int M = 1000; // 生产者线程每隔M毫秒添加一个整数
private static final int N = 2000; // 消费者线程每隔N毫秒取出一个整数并打印
public static void main(String[] args) {
Deque<Integer> queue = new LinkedList<>();
Thread producerThread = new Thread(() -> {
int i = 1;
while (true) {
queue.add(i++);
try {
Thread.sleep(M);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread consumerThread1 = new Thread(() -> {
while (true) {
int num = queue.poll();
if (num != 0) {
System.out.println("Consumer 1: " + num);
}
try {
Thread.sleep(N);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread consumerThread2 = new Thread(() -> {
while (true) {
int num = queue.poll();
if (num != 0) {
System.out.println("Consumer 2: " + num);
}
try {
Thread.sleep(N);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
producerThread.start();
consumerThread1.start();
consumerThread2.start();
}
}
```
在这个解决方案中,我们使用了一个 `LinkedList` 实现的 `Deque` 来存储整数队列。我们创建了一个生产者线程,它不断往队列的尾部添加整数,每隔 `M` 毫秒添加一个。我们还创建了两个消费者线程,它们不断从队列的头部取出整数,并打印出来,每隔 `N` 毫秒取出一个。
注意,在我们的实现中,我们使用了 `poll()` 方法来从队列的头部取出整数。如果队列为空,该方法会返回 `null`。为了避免 `null` 值的出现,我们将取出的整数与 `0` 进行比较,如果不等于 `0`,则打印出来。这里的 `0` 只是一个任意的值,你也可以使用其他的值来代表空队列。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)