可以使用Java中的BlockingQueue
接口來實現(xiàn)阻塞隊列。
首先,需要導(dǎo)入java.util.concurrent
包,因為BlockingQueue
接口是該包中的一部分。
然后,可以選擇合適的阻塞隊列實現(xiàn)類。常見的阻塞隊列實現(xiàn)類有ArrayBlockingQueue
、LinkedBlockingQueue
和SynchronousQueue
等。
以下是一個使用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)者線程會被阻塞直到有空間可用;如果隊列為空,消費者線程會被阻塞直到隊列中有元素可取。