亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

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
循化| 慈利县| 巴楚县| 平南县| 丹江口市| 自治县| 永平县| 六枝特区| 大英县| 通山县| 论坛| 宕昌县| 吴川市| 高阳县| 长沙县| 泽普县| 肇州县| 双柏县| 井陉县| 邵阳县| 洛浦县| 怀来县| 永春县| 西充县| 自贡市| 错那县| 夹江县| 天门市| 五莲县| 南昌市| 河间市| 焉耆| 县级市| 万山特区| 洛南县| 汉寿县| 阿巴嘎旗| 辽源市| 望谟县| 瑞昌市| 雷波县|