首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
java面试题基础
冒泡排序算法
插入排序算法
归并排序算法
二叉树排序算法
基数排序
选择排序
堆排序
快排
TCP-三次握手
HTTP协议
WebSocket
Mysql架构
Innodb与Myisam数据库引擎
事务隔离级别
面向对象(OOP)
异常
泛型
Object
StringBuilder
代理
注解
java面试题基础二
HashMap
ConcurrentHashMap
BlockingQueue
线程
Volatile
AtomicInteger
Synchronized
Java虚拟机架构
类加载器
内存模型
垃圾回收
Mybatis面试题
IOC
高并发系统设计
分布式缓存
分布式锁
分布式事务
消息队列
当前位置:
首页>>
技术小册>>
Java面试指南
小册名称:Java面试指南
### Java中的BlockingQueue介绍 Java中的BlockingQueue是一种支持线程安全的队列,它提供了一种基于阻塞的队列操作方式。具体来说,当队列为空时,从队列中获取元素的操作将被阻塞,直到队列中有新的元素添加;当队列已满时,向队列中添加元素的操作将被阻塞,直到队列中有空闲位置。 BlockingQueue接口提供了以下几个常用方法: put(E e): 向队列中添加一个元素,如果队列已满,则会一直阻塞等待直到队列有空闲位置。 take(): 从队列中获取并删除一个元素,如果队列为空,则会一直阻塞等待直到队列中有元素可取。 offer(E e, long timeout, TimeUnit unit): 向队列中添加一个元素,并在指定的时间内等待队列空闲,如果在指定时间内队列还是满的,则返回false。 poll(long timeout, TimeUnit unit): 从队列中获取并删除一个元素,并在指定的时间内等待队列非空,如果在指定时间内队列还是空的,则返回null。 下面是一个使用BlockingQueue实现生产者-消费者模式的代码示例: ```java import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; public class ProducerConsumerExample { public static void main(String[] args) { BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(10); Thread producer = new Thread(new Producer(queue)); Thread consumer = new Thread(new Consumer(queue)); producer.start(); consumer.start(); } } class Producer implements Runnable { private BlockingQueue<Integer> queue; public Producer(BlockingQueue<Integer> queue) { this.queue = queue; } @Override public void run() { try { for (int i = 0; i < 10; i++) { queue.put(i); System.out.println("Produced: " + i); Thread.sleep(1000); } } catch (InterruptedException e) { e.printStackTrace(); } } } class Consumer implements Runnable { private BlockingQueue<Integer> queue; public Consumer(BlockingQueue<Integer> queue) { this.queue = queue; } @Override public void run() { try { while (true) { Integer value = queue.take(); System.out.println("Consumed: " + value); Thread.sleep(2000); } } catch (InterruptedException e) { e.printStackTrace(); } } } ``` 在上面的例子中,Producer类和Consumer类分别实现了Runnable接口,并在run()方法中分别调用BlockingQueue的put()和take()方法来添加和获取元素。当队列已满时,生产者线程会被阻塞,直到队列有空闲位置;当队列为空时,消费者线程会被阻塞,直到队列中有元素可取。这种基于阻塞的队列操作方式可以很好地解决多线程并发访问队列时的线程安全问题。
上一篇:
ConcurrentHashMap
下一篇:
线程
该分类下的相关小册推荐:
Java语言基础11-Java中的泛型
深入理解Java虚拟机
Java语言基础10-Java中的集合
经典设计模式Java版
Java必知必会-Maven初级
Java语言基础9-常用API和常见算法
Java并发编程
Java性能调优实战
Java语言基础8-Java多线程
Mybatis合辑5-注解、扩展、SQL构建
SpringBoot合辑-初级篇
Java必知必会-JDBC