中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

Java并發之BlockingQueue的使用

小云
103
2023-08-11 14:41:04
欄目: 編程語言

Java的并發包中提供了一個BlockingQueue接口,它是一個支持線程安全的隊列,并且在隊列為空時會阻塞消費者線程,直到隊列不為空。在生產者線程向隊列中添加元素時,如果隊列已滿,則會阻塞生產者線程,直到隊列不滿。

BlockingQueue接口提供了以下常用的方法:

  1. put(E e):將元素e添加到隊列的末尾,如果隊列已滿,則阻塞線程。

  2. take():移除并返回隊列頭部的元素,如果隊列為空,則阻塞線程。

  3. offer(E e):將元素e添加到隊列的末尾,如果隊列已滿,則返回false。

  4. poll():移除并返回隊列頭部的元素,如果隊列為空,則返回null。

  5. size():返回隊列中的元素個數。

下面是一個使用BlockingQueue的例子:

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ArrayBlockingQueue;
public class BlockingQueueExample {
public static void main(String[] args) {
// 創建一個大小為10的阻塞隊列
BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(10);
// 創建生產者線程
Thread producer = new Thread(() -> {
try {
for (int i = 0; i < 100; i++) {
// 將元素添加到隊列末尾
queue.put(i);
System.out.println("Producer: " + i);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
// 創建消費者線程
Thread consumer = new Thread(() -> {
try {
for (int i = 0; i < 100; i++) {
// 從隊列中移除并返回頭部元素
int value = queue.take();
System.out.println("Consumer: " + value);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
// 啟動生產者和消費者線程
producer.start();
consumer.start();
}
}

上述例子中,創建了一個大小為10的BlockingQueue,生產者線程使用put方法將元素添加到隊列末尾,消費者線程使用take方法從隊列頭部移除元素。當隊列為空時,消費者線程會被阻塞,直到隊列不為空。當隊列已滿時,生產者線程會被阻塞,直到隊列不滿。

0
额济纳旗| 阿巴嘎旗| 昭通市| 资兴市| 句容市| 济源市| 松滋市| 成安县| 乐昌市| 沙雅县| 句容市| 天门市| 东安县| 额尔古纳市| 边坝县| 红桥区| 交城县| 上栗县| 惠东县| 遂平县| 夏邑县| 巴塘县| 平武县| 昆明市| 梧州市| 阳谷县| 五莲县| 东光县| 任丘市| 昌宁县| 乌兰察布市| 西丰县| 什邡市| 南皮县| 新蔡县| 道真| 黄山市| 昆明市| 门头沟区| 长沙县| 介休市|