在Java中,可以使用java.util.concurrent包中的BlockingQueue接口來實現阻塞隊列。BlockingQueue接口提供了put()和take()方法用于插入和獲取元素,當隊列已滿或為空時,put()和take()方法會阻塞當前線程,直到隊列有空間或有元素可獲取。
以下是一個簡單的示例,演示如何使用BlockingQueue實現一個生產者-消費者模式:
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class ProducerConsumerExample {
private static final int CAPACITY = 5;
private static BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(CAPACITY);
public static void main(String[] args) {
Thread producer = new Thread(new Producer());
Thread consumer = new Thread(new Consumer());
producer.start();
consumer.start();
}
static class Producer implements Runnable {
public void run() {
try {
for (int i = 0; i < 10; i++) {
queue.put(i);
System.out.println("Produced: " + i);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
static class Consumer implements Runnable {
public void run() {
try {
for (int i = 0; i < 10; i++) {
int value = queue.take();
System.out.println("Consumed: " + value);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
在這個例子中,我們創建了一個ArrayBlockingQueue作為阻塞隊列,然后分別創建了生產者和消費者線程。生產者線程會往隊列中插入元素,消費者線程會從隊列中獲取元素。生產者和消費者線程會交替執行,直到隊列中的元素全部被消費完。
通過使用BlockingQueue,我們可以很方便地實現生產者-消費者模式,而不需要手動編寫線程同步的邏輯,使得代碼更加簡潔和易于維護。