LinkedBlockingQueue使用

简介: LinkedBlockingQueue使用

poll和peek方法出错进返回null。因此,向队列中插入null值是不合法的


import java.util.concurrent.LinkedBlockingQueue;
public class Main {
  public static void main(String[] args) {
    LinkedBlockingQueue<Integer> queue =new LinkedBlockingQueue<Integer>();
    for (int i = 1; i < 10; i++) {
      queue.add(i);
    }
    //先进先出,并删除
    System.out.println(queue.poll());
    System.out.println(queue.poll());
    System.out.println(queue.poll());
    //获取第一个元素·但不删除
    System.out.println(queue.element());
    System.out.println(queue);
  }
}


LinkedBlockingQueue的容量是没有上限的(说的不准确,在不指定时容量为Integer.MAX_VALUE,不要然的话在put时怎么会受阻呢),但是也可以选择指定其最大容量,它是基于链表的队列,此队列按 FIFO(先进先出)排序元素。


微信图片_20220113200734.png


remove、element、offer 、poll、peek 其实是属于Queue接口。  

 

测试队列


import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class BlockingQueueTest {
 /**
 定义装苹果的篮子
  */
 public static class Basket{
  // 篮子,能够容纳3个苹果
  BlockingQueue<String> basket = new ArrayBlockingQueue<String>(3);
  // 生产苹果,放入篮子
  public void produce() throws InterruptedException{
   // put方法放入一个苹果,若basket满了,等到basket有位置
   basket.put("An apple");
  }
  // 消费苹果,从篮子中取走
  public String consume() throws InterruptedException{
   // get方法取出一个苹果,若basket为空,等到basket有苹果为止
   String apple = basket.take();
   return apple;
  }
  public int getAppleNumber(){
   return basket.size();
  }
 }
 // 测试方法
 public static void testBasket() {
  // 建立一个装苹果的篮子
  final Basket basket = new Basket();
  // 定义苹果生产者
  class Producer implements Runnable {
   public void run() {
    try {
     while (true) {
      // 生产苹果
      System.out.println("生产者准备生产苹果:" 
        + System.currentTimeMillis());
      basket.produce();
      System.out.println("生产者生产苹果完毕:" 
        + System.currentTimeMillis());
      System.out.println("生产完后有苹果:"+basket.getAppleNumber()+"个");
      // 休眠300ms
      Thread.sleep(300);
     }
    } catch (InterruptedException ex) {
    }
   }
  }
  // 定义苹果消费者
  class Consumer implements Runnable {
   public void run() {
    try {
     while (true) {
      // 消费苹果
      System.out.println("消费者准备消费苹果:" 
        + System.currentTimeMillis());
      basket.consume();
      System.out.println("消费者消费苹果完毕:" 
        + System.currentTimeMillis());
      System.out.println("消费完后有苹果:"+basket.getAppleNumber()+"个");
      // 休眠1000ms
      Thread.sleep(1000);
     }
    } catch (InterruptedException ex) {
    }
   }
  }
  ExecutorService service = Executors.newCachedThreadPool();
  Producer producer = new Producer();
  Consumer consumer = new Consumer();
  service.submit(producer);
  service.submit(consumer);
  // 程序运行10s后,所有任务停止
  try {
   Thread.sleep(10000);
  } catch (InterruptedException e) {
  }
  service.shutdownNow();
 }
 public static void main(String[] args) {
  BlockingQueueTest.testBasket();
 }
}
相关文章
|
1月前
|
人工智能 API 开发工具
阿里云百炼Token Plan全功能详解:订阅规则、支持模型与API实操教程
在大模型应用快速普及的当下,开发者与企业团队经常会遇到一个现实难题:项目会同时用到文本推理、视觉理解、图片生成、AI视频生成等多种能力,不同模型分属不同服务,需要分别开通权限、管理多套密钥、分别结算账单,不仅管理成本高,预算也很难提前把控。很多开发人员一边使用代码智能体工具做程序开发,一边调用图像视频模型做素材生成,来回切换多个平台,账号、密钥、账单分散,一旦业务量上涨,实际开销很容易超出预期。阿里云百炼推出的Token Plan,就是面向这类场景打造的一站式大模型订阅服务,通过统一Credits额度,实现多款主流大模型共享一套订阅权益,降低多模型场景下的管理复杂度,适配个人开发者、独立工作室
204 2
|
10月前
|
安全 开发者 Windows
Win10/11系统永久暂停更新教程,避免频繁更新 Win 系统出问题,一个小工具就能搞定。
Win10/11系统永久暂停更新教程,避免频繁更新 Win 系统出问题,一个小工具就能搞定。
4265 7
|
存储 资源调度 并行计算
# Qwen3-8B 与 Qwen3-14B 的 TTFT 性能对比与底层原理详解
通义千问Qwen3系列是通义实验室2025年推出的最新大模型,包含多种参数版本,其中Qwen3-8B与Qwen3-14B均支持32K token上下文。Qwen3-8B参数量较小,响应更快,适合低延迟交互;Qwen3-14B参数更多,推理更强,适用于复杂任务。两者在TTFT、架构优化、量化技术及部署方案上各有侧重,满足多样应用场景需求。
6109 10
|
9月前
|
存储 缓存 运维
一场FullGC故障排查
本文记录了一次由Full GC引发的CPU使用率飙升至104%的问题排查过程。通过分析JVM堆内存,发现大对象(List&lt;Map&gt;)导致老年代频繁被占满,进而触发Full GC。利用JProfiler定位到问题根源:Excel数据以低效结构加载至内存且长期驻留,造成内存膨胀。最终提出“治本”与“治标”两类解决方案,并总结了线上高CPU问题的排查思路与经验。
 一场FullGC故障排查
|
弹性计算 监控 并行计算
如何在阿里云上部署满血版DeepSeek
在阿里云部署“满血版”DeepSeek模型,需合理配置硬件与软件环境。首先注册阿里云账号并申请GPU计算型ECS实例(推荐V100/A10/A100),配置安全组规则。接着安装NVIDIA驱动、CUDA及Python依赖库,下载DeepSeek模型权重并克隆代码仓库。通过FastAPI编写推理接口,使用Uvicorn运行服务,支持反向代理与HTTPS配置。最后优化显存、监控性能,确保高效稳定运行。
如何在阿里云上部署满血版DeepSeek
|
前端开发 小程序 搜索推荐
什么类型的项目会优先选择Headless CMS
Headless CMS的核心价值在于内容与展示的解耦,当项目需要跨终端、高定制化前端、敏捷迭代或强扩展性时,它会成为更优选择;而在小规模、低预算、内容简单且稳定的场景中,传统CMS则更具实用性。
478 1
|
缓存 小程序 前端开发
商城/点餐/家政类小程序源码合集_微信抖音小程序源码开发从入门到精通实战
本文系统讲解如何利用现有源码快速开发商城、点餐、家政类微信/抖音小程序,涵盖环境搭建、核心功能实现、多平台部署与优化,提供完整技术方案。实战导向,助力开发者高效入门与落地。
|
安全 Java API
Java 抽象类与接口在 Java17 + 开发中的现代应用实践解析
《Java抽象类与接口核心技术解析》 摘要:本文全面剖析Java抽象类与接口的核心概念与技术差异。抽象类通过模板设计实现代码复用,支持具体方法与状态管理;接口则定义行为规范,实现多态支持。文章详细对比了两者在实例化、方法实现、继承机制等方面的区别,并提供了模板方法模式(抽象类)和策略模式(接口)的典型应用示例。特别指出Java8+新特性为接口带来的灵活性提升,包括默认方法和静态方法。最后给出最佳实践建议:优先使用接口定义行为规范,通过抽象类实现代码复用,合理组合两者构建灵活架构。
521 2
|
存储 人工智能 缓存
《记忆革命:Gemini 1.5如何让Transformer突破百万级上下文枷锁》
Gemini 1.5突破传统Transformer上下文限制,实现百万级token处理能力。通过“工作记忆”与“长期记忆”双层结构,结合语义压缩、记忆路由及解耦计算存储,大幅提升效率。它模拟人脑记忆机制,强化长文档理解、代码推理和跨模态关联能力,为AI认知范式带来革命性转变,开启结构化记忆与动态调控新方向。
662 2
|
Web App开发 数据安全/隐私保护
快手批量发布作品工具,短视频一键发布到多个平台, 自媒体批量发布工具
这个批量发布工具支持快手、抖音、B站和YouTube平台,使用Selenium实现自动化上传

热门文章

最新文章