java 用arrayblockingQueue编写一个线程向一个4位循环缓冲区中循环写入1-10的随机数,另一个线程将循环缓冲区中数据取出打印出来
时间: 2024-02-21 22:57:16 浏览: 89
Java实现多线程轮流打印1-100的数字操作
好的,这是一个典型的生产者-消费者问题,可以使用 ArrayBlockingQueue 来实现缓冲区。
首先,我们需要定义一个长度为 4 的数组作为缓冲区,并创建一个 ArrayBlockingQueue 对象:
```java
int[] buffer = new int[4];
ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<>(4);
```
然后,我们创建一个生产者线程和一个消费者线程,并在生产者线程中循环向缓冲区中写入随机数,消费者线程从缓冲区中取出数据并打印出来。
生产者线程的代码如下:
```java
class Producer implements Runnable {
public void run() {
try {
while (true) {
int data = (int) (Math.random() * 10) + 1;
queue.put(data); // 将数据放入缓冲区
System.out.println("生产者写入数据:" + data);
Thread.sleep((int) (Math.random() * 1000));
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
消费者线程的代码如下:
```java
class Consumer implements Runnable {
public void run() {
try {
while (true) {
int data = queue.take(); // 从缓冲区中取出数据
System.out.println("消费者读取数据:" + data);
Thread.sleep((int) (Math.random() * 1000));
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
最后,我们创建生产者和消费者线程,并启动它们:
```java
Producer producer = new Producer();
Consumer consumer = new Consumer();
new Thread(producer).start();
new Thread(consumer).start();
```
这样就完成了一个基于 ArrayBlockingQueue 的生产者-消费者模型,可以循环写入 1-10 的随机数,并从缓冲区中取出打印。
阅读全文