Java的并发包中提供了一个BlockingQueue接口,它是一个支持线程安全的队列,并且在队列为空时会阻塞消费者线程,直到队列不
Java的并发包中提供了一个BlockingQueue接口,它是一个支持线程安全的队列,并且在队列为空时会阻塞消费者线程,直到队列不为空。在生产者线程向队列中添加元素时,如果队列已满,则会阻塞生产者线程,直到队列不满。
BlockingQueue接口提供了以下常用的方法:
1. put(E e):将元素e添加到队列的末尾,如果队列已满,则阻塞线程。
2. take():移除并返回队列头部的元素,如果队列为空,则阻塞线程。
3. offer(E e):将元素e添加到队列的末尾,如果队列已满,则返回false。
4. poll():移除并返回队列头部的元素,如果队列为空,则返回null。
5. size():返回队列中的元素个数。
下面是一个使用BlockingQueue的例子:
```java
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ArrayBlockingQueue;
public class BlockingQueueExample {
public static void main(String[] args) {
// 创建一个大小为10的阻塞队列
BlockingQueue
// 创建生产者线程
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方法从队列头部移除元素。当队列为空时,消费者线程会被阻塞,直到队列不为空。当队列已满时,生产者线程会被阻塞,直到队列不满。
--结束END--
本文标题: Java并发之BlockingQueue的使用
本文链接: https://www.lsjlt.com/news/368984.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0