并发编程之BlockingQueue(阻塞队列)的详细解析

简介: 并发编程之BlockingQueue(阻塞队列)的详细解析

BlockingQueue(阻塞队列)

ArrayBlockingQueue

ArrayBlockingQueue用于解决多线程问题:生产者消费者案例

ArrayBlockingQueue对象在初始化的时候需要指定其容量。

对于这个队列的操作,给出三种操作方法: 插入、移除、检查

ArrayBlockingQueue对于这三种操作方法,给出了四套解决方案:

  1. 抛出异常(插入时队满,或移除时队空 抛出异常 IllegalStateException:Queue full 或 NoSuchElementExcept)
  2. 特殊值(插入或移除失败时,返回特殊值:null或false)
  3. 阻塞(插入或移除失败时,会阻塞等待,等待队列有空位或者有元素)
  4. 超时(插入或移除失败时,会阻塞等待,等待队列有空位或者有元素,但是可以设置具体超时等待时间)
方法类型 抛出异常 特殊值 阻塞 超时
插入 add(e) offer(e) put(e) offer(e,time,unit)
移除 remove() poll() take() poll(time,unit)
检查 element() peek() 不可用 不可用
  • 检查element() 给出队首的元素

运行结果:

代码:

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
/**
 * @author zkw
 * @Description TODO
 */
public class BlockingQueueDemo {
    public static void main(String[] args) throws InterruptedException {
        BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>(3);
        new Thread(()->{
            for (int i = 0; i < 4; i++) {
                try {
                    blockingQueue.offer(i+"", 3, TimeUnit.SECONDS);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
        new Thread(()->{
            for (int i = 0; i < 4; i++) {
                try {
                    System.out.println(blockingQueue.poll(3, TimeUnit.SECONDS));
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}


相关文章
|
2天前
|
人工智能 Go 调度
掌握Go并发:Go语言并发编程深度解析
掌握Go并发:Go语言并发编程深度解析
|
2天前
|
Java
并发编程之线程池的底层原理的详细解析
并发编程之线程池的底层原理的详细解析
51 0
|
2天前
|
Java
并发编程之线程池的应用以及一些小细节的详细解析
并发编程之线程池的应用以及一些小细节的详细解析
17 0
|
2天前
并发编程之读写锁ReadWriteLock的详细解析(带小案例)
并发编程之读写锁ReadWriteLock的详细解析(带小案例)
13 0
|
2天前
|
并行计算 数据处理 开发者
Python并发编程:解析异步IO与多线程
本文探讨了Python中的并发编程技术,着重比较了异步IO和多线程两种常见的并发模型。通过详细分析它们的特点、优劣势以及适用场景,帮助读者更好地理解并选择适合自己项目需求的并发编程方式。
|
2天前
|
存储 安全
【并发编程】深入解析CurrentHashmap
【并发编程】深入解析CurrentHashmap
6 0
|
2天前
|
存储 安全 Java
Java并发编程中的高效数据结构:ConcurrentHashMap解析
【4月更文挑战第25天】在多线程环境下,高效的数据访问和管理是至关重要的。Java提供了多种并发集合来处理这种情境,其中ConcurrentHashMap是最广泛使用的一个。本文将深入分析ConcurrentHashMap的内部工作原理、性能特点以及它如何在保证线程安全的同时提供高并发性,最后将展示其在实际开发中的应用示例。
|
2天前
|
监控 Java
并发编程之线程池的详细解析
并发编程之线程池的详细解析
13 0
|
2天前
并发编程之CountDownLatch和CyclicBarrier的详细解析(带小案例)
并发编程之CountDownLatch和CyclicBarrier的详细解析(带小案例)
11 0
|
19小时前
|
Linux 网络安全 Windows
网络安全笔记-day8,DHCP部署_dhcp搭建部署,源码解析
网络安全笔记-day8,DHCP部署_dhcp搭建部署,源码解析

推荐镜像

更多