溫馨提示×

怎么用Java實現(xiàn)阻塞隊列

小億
99
2023-10-14 08:29:02
欄目: 編程語言

可以使用Java中的BlockingQueue接口來實現(xiàn)阻塞隊列。

首先,需要導(dǎo)入java.util.concurrent包,因為BlockingQueue接口是該包中的一部分。

然后,可以選擇合適的阻塞隊列實現(xiàn)類。常見的阻塞隊列實現(xiàn)類有ArrayBlockingQueueLinkedBlockingQueueSynchronousQueue等。

以下是一個使用ArrayBlockingQueue實現(xiàn)阻塞隊列的示例代碼:

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class BlockingQueueExample {
public static void main(String[] args) {
// 創(chuàng)建一個容量為10的阻塞隊列
BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(10);
// 創(chuàng)建一個生產(chǎn)者線程
Thread producerThread = new Thread(() -> {
try {
// 生產(chǎn)1到10的數(shù)字,并將其放入隊列
for (int i = 1; i <= 10; i++) {
queue.put(i);
System.out.println("Produced: " + i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
// 創(chuàng)建一個消費者線程
Thread consumerThread = new Thread(() -> {
try {
// 從隊列中取出數(shù)字并消費
while (true) {
int num = queue.take();
System.out.println("Consumed: " + num);
Thread.sleep(2000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
// 啟動生產(chǎn)者和消費者線程
producerThread.start();
consumerThread.start();
}
}

在以上示例代碼中,創(chuàng)建了一個容量為10的ArrayBlockingQueue對象,然后創(chuàng)建了一個生產(chǎn)者線程和一個消費者線程。生產(chǎn)者線程會不斷生產(chǎn)數(shù)字并放入隊列中,消費者線程會從隊列中取出數(shù)字并消費。如果隊列已滿,生產(chǎn)者線程會被阻塞直到有空間可用;如果隊列為空,消費者線程會被阻塞直到隊列中有元素可取。

0