JUC(2): 阻塞队列+线程池(重点)+新时代程序员必会

2023-11-12

一、阻塞队列

  • ArrayBlockingQueue : 一个由数组结构组成的有界阻塞队列。
    LinkedBlockingQueue : 一个由链表结构组成的有界阻塞队列。
    PriorityBlockingQueue : 一个支持优先级排序的无界阻塞队列。
    DelayQueue: 一个使用优先级队列实现的无界阻塞队列。
    SynchronousQueue: 一个不存储元素的阻塞队列。
    LinkedTransferQueue: 一个由链表结构组成的无界阻塞队列。
    LinkedBlockingDeque: 一个由链表结构组成的双向阻塞队列。
    BlockingQueue接口: 单向阻塞队列实现了该接口。
    BlockingDeque接口: 双向阻塞队列实现了该接口。

  • 使用场景:多线程并发处理,线程池

  • API:

    方法描述 抛出异常 返回特殊的值 一直阻塞 超时退出
    插入数据 add(e) offer(e) put(e) offer(e,time,unit)
    获取并移除队列的头 remove() poll() take() poll(time,unit)
    获取但不移除队列的头 element() peek() 不可用 不可用
  • SynchronousQueue 同步队列:进去一个元素,必须等待取出来之后,才能再往里面放一个元素!

二、线程池(重点)

  • 不允许用Executors工具创建线程池,直接用 ThreadPoolExecutor:

  • public ThreadPoolExecutor(int corePoolSize,	// 核心线程池大小
                                  int maximumPoolSize,	// 最大线程池大小
                                  long keepAliveTime,	// 非核心线程池超时释放时间
                                  TimeUnit unit,	// 超时单位
                                  BlockingQueue<Runnable> workQueue,// 阻塞队列
                                  ThreadFactory threadFactory,// 线程工厂
                                  RejectedExecutionHandler handler// 拒绝策略 
                             ) {
            if (corePoolSize < 0 ||
                maximumPoolSize <= 0 ||
                maximumPoolSize < corePoolSize ||
                keepAliveTime < 0)
                throw new IllegalArgumentException();
            if (workQueue == null || threadFactory == null || handler == null)
                throw new NullPointerException();
            this.acc = System.getSecurityManager() == null ?
                    null :
                    AccessController.getContext();
            this.corePoolSize = corePoolSize;
            this.maximumPoolSize = maximumPoolSize;
            this.workQueue = workQueue;
            this.keepAliveTime = unit.toNanos(keepAliveTime);
            this.threadFactory = threadFactory;
            this.handler = handler;
        }
    
  • Executors创建线程池三大方法:newSingleThreadExecutor(),newFixedThreadPool(5),newCachedThreadPool()

  • ThreadPoolExecutor 创建线程池,七大参数

  • 4种拒绝策略

    new ThreadPoolExecutor.AbortPolicy()              //不处理,抛出异常
    new ThreadPoolExecutor.CallerRunsPolicy()         //哪来的回哪去(main线程)
    new ThreadPoolExecutor.DiscardOldestPolicy()      //丢掉任务,不抛出异常
    new ThreadPoolExecutor.DiscardPolicy()            //尝试去和最早的竞争,不抛出异常!
    

三、新时代程序员必会:

    • lambda表达式
    • 链式编程
    • 函数式Function接口:只有一个方法的接口,(Consumer接口,Predicate接口,Supplier接口)
    • Stream流式计算
    public class StreamTest {
        /*** 题目要求:一分钟内完成此题,只能用一行代码实现!
         *  现在有5个用户!筛选: *
         *  1、ID 必须是偶数 *
         * 2、年龄必须大于23岁 *
         * 3、用户名转为大写字母 *
         * 4、用户名字母倒着排序 *
         * 5、只输出一个用户!
         * */
        public static void main(String[] args) {
            User james = new User(101, "James", 37);
            User james1 = new User(102, "James2", 34);
            User james2 = new User(103, "James3", 32);
            User james3 = new User(104, "James4", 38);
            //存储:可以是集合、MySQL等
            List<User> list = Arrays.asList(james, james1, james2, james3);
    
            //计算:Stream流
            // lambda表达式、链式编程、函数式接口、Stream流式计算
            list.stream()
                    .filter((user -> {return user.getId() % 2 == 0;}))
                    .filter(user -> {return user.getAge() > 23;})
                    .map(user -> {return user.getName().toUpperCase();})
                    .sorted((a, b) -> {return b.compareTo(a);})
                    .limit(1)
                    .forEach(System.out :: println);
    
        }
    
    }
    
  • ForkJion(分支合并计算:计算量大提高效率)

    • 相当于Map-Reduce
    • 工作窃取(线程B执行完自己任务后,窃取线程A的任务执行,提高效率)
  • 异步回调(Future - CompletableFuture)-----> 类似于Ajax异步调用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JUC(2): 阻塞队列+线程池(重点)+新时代程序员必会 的相关文章

  • Grizzly 和 Servlet 容器上下文

    我试图在我编写的 在 Grizzly 上运行的 Servlet 中获取一些注入的上下文 例如 Session 或 HttpServletRequest 但我所做的似乎都不起作用 整个过程似乎过早地停止了 并出现以下错误 SEVERE Mis
  • 在 Java 中跨平台地播种随机生成器,无需时间

    我几乎同时在两个线程上初始化两个随机数生成器 并且我希望这两个生成器的行为完全不同 我会打电话Random nextInt 7 经常一个接一个地在两台发电机上运行 使用System currentTimeMillis 这不是一个好主意 因为
  • 检索和设置 IntelliJ IDEA 插件开发的拆分窗口设置

    我正在编写一个 IntelliJ IDEA 插件 用于保存打开选项卡的会话 称为选项卡会话 https github com alp82 idea tabsession 这个问题是后续问题IntelliJ IDEA 插件开发 保存选项卡组
  • 在 Eclipse 中跨文件搜索注释掉的代码

    有没有一种快速方法可以在 Eclipse 中查找 Java 文件中所有注释掉的代码 也许是搜索中的任何选项 或者任何可以执行此操作的附加组件 它应该只能找到被注释掉的代码 而不是普通的注释 在 Eclipse 中 我只是在打开正则表达式复选
  • Android - 内容值覆盖现有行

    我正在尝试使用插入值ContentValues 我已将 5 个值插入到 5 列中 运行应用程序后 我只有最后一组值的行ContentValues 前四组未插入 ContentValues cv new ContentValues cv pu
  • 使用 Java 检索 Window 进程的 CPU 使用率

    我正在寻找一个 Java 解决方案来查找 Windows 中正在运行的进程的 CPU 使用情况 查了一下网上 关于Java解决方案的信息似乎很少 请记住 我并不是要查找 JVM 的 CPU 使用情况 而是要查找当时在 Windows 中运行
  • 如何在JUnit测试中将MockWebServer端口设置为WebClient?

    我在用着spring boot with WebClient 它被自动装配为一个 bean 问题 写一个junit集成测试 我必须使用okhttpMockWebServer 该模拟始终在随机端口上启动 例如localhost 14321 N
  • JPA 为每个项目选择最新实例

    假设我有一个会议实体 每次会议都有一个与会者和一个会议日期 在我的会议表中 我可能为每个与会者举行多个会议 每个会议都有不同的日期 我需要一个 JPA 查询 该查询将为所有与会者仅选择最新的会议 例如 如果我的桌子看起来像这样 Meetin
  • splitByWholeSeparatorPreserveAllTokens 和 split 之间的区别

    有什么区别StringUtils splitByWholeSeparatorPreserveAllTokens and String split With splitByWholeSeparatorPreserveAllTokens 我们可
  • java中main的返回类型

    我想知道为什么java中main方法只有void返回类型 public static void main String args 为什么main方法除了void之外没有其他返回类型 Thanks 简短的回答是 因为这就是语言规范 http
  • 在 Java 中查询 XML 的最简单方法

    我有带有 XML 的小字符串 例如 String myxml
  • 如何加快 jar 签名者的速度?

    我使用 ant 来签署我的 jars 以进行网络启动部署 Ant signjar 在 Web 启动签名时非常慢 如何加快签名过程 我找到了一种可能的解决方案 早些时候 在构建脚本 ant signjar 中 按顺序调用所有 jar 我们使用
  • 将 @RequestLine 与 Feign 一起使用

    我有一个工作 Feign 接口定义为 FeignClient content link service public interface ContentLinkServiceClient RequestMapping method Requ
  • jsf 中的类型未找到属性

    我正在尝试调用 jsf 中使用 primefaces 的属性 但我有错误 500 在托管bean PersonelBean 类型上找不到 我正在使用 hibernate jsf 和 spring PersonelBean java Mana
  • Java中如何限制文件大小

    我正在我的应用程序中创建一个文件 并继续向该文件中写入一些内容 但是当我的文件达到一定大小 比如说 100 行 后 我想删除第一行并将新行写入底部 要求是我的文件应该受到限制 但它应该保留我写入文件的最新内容 请告诉我在Java中是否可行
  • Java Calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY),它会向后滚动、向前滚动还是未知?

    假设以下代码在 2009 年 8 月 22 日 星期六 执行 Calendar c Calendar getInstance c set Calendar DAY OF WEEK Calendar SUNDAY c get Calendar
  • 从 AJP 连接器请求中检索 Shibboleth 属性

    当我在 Apache 上运行 Shibboleth 身份验证时遇到了一个奇怪的问题 当 Tomcat7 在后端运行时 Apache 通过 mod proxy ajp 发送所有内容 Shibboleth 的参数也是如此 In the 文档 h
  • 如何使用 AEM 解析 org.apache.http.ssl?

    最终 我尝试在 Java 代码中使用 AWS S3 库来通过 AEM 启用服务器端 S3 上传 但在安装依赖项和 或由 AEM 识别时遇到了问题 每次我添加新的依赖项时 都会弹出五个问题 在我尝试构建的这个包中 这是我看到的错误 The i
  • 用于从链表中删除元素的大 O 表示法[重复]

    这个问题在这里已经有答案了 我正在阅读有关链接列表的内容 我发现 从链表中删除所需的元素需要 O n 运行时间 其中 n 是元素的数量 列表中的元素 http www cs mcgill ca dprecup courses IntroCS
  • 在测试期间调用预定方法[重复]

    这个问题在这里已经有答案了 我正在使用 Maven 开发 SpringBoot 应用程序 我有一个班级 Component有方法的注释m与 Scheduled initialDelay 1000 fixedDelay 5000 注解 这里f

随机推荐

  • pytorch学习总结(一)(SGD随机梯度下降、学习率调整策略、train模式)

    看了几个月的理论 总算是开始实践了 学习了几个月 这门学问中数学的应用还挺有意思的 比现在的工作有意思多了 1 torch optim SGD trainer torch optim SGD net parameters lr lr mom
  • linux怎么用代码做扣扣,如何在Linux上安装程序员喜爱的文本编辑器NotepadQQ

    原标题 如何在Linux上安装程序员喜爱的文本编辑器NotepadQQ 来自 Linux迷 链接 https www linuxmi com pop os 20 04 ubuntu html NotepadQQ是一个令人兴奋的应用程序 它试
  • 王垠的40行代码,究竟diao在哪里

    王垠是谁 不用我说了吧 别傻谈 亮码瞧 A simple CPS transformer which does proper tail call and does not duplicate contexts for if expressi
  • element-ui el-table 如何实现合并单元格

    el table的组件的可以合并单元格 先定义参数span method 方法objectSpanMethod 在方法内控制当前单元格渲染成几个单元格或者删除掉当前单元格 比如 代码中定义 span method objectSpanMet
  • Frameset布局

    原文地址 http captaincook iteye com blog 365634
  • angularjs 1.6.x 教程学习心得

    依赖注入 依赖注入是angularJs的核心 应用启动时 angular会创建一个injector 它会寻找并注入所有应用需要的服务 必须先被正确的定义 延迟实例化 lazily instantiate providers Provider
  • vsftpd主动模式和被动模式

    vsftpd主动模式和被动模式 主动模式 PORT 所谓主动模式 指的是FTP服务器主动去连接客户端的数据端口来传输数据 其过程具体来说就是 客户端从一个任意的非特权端口N N gt 1024 连接到FTP服务器的命令端口 即tcp 21端
  • 看看UE4源码: Pawn中默认InputComponent是控制器还是Pawn的

    Pawn中的InputComponent是谁的 结论 默认情况下 如果Pawn首次被PlayerController控制 则会在Pawn中创建一个InputComponent 写在Pawn中SetupPlayerInputComponent
  • 数据结构编程视频

    来源 我是码农 转载请保留出处和链接 本文链接 http www 54manong com cate 3 数据结构与算法是计算机专业一门相当重要的专业必修课 同时数据结构与算法也是电气电子类等一些需要涉及到编程的专业学生一门很重要的基础课程
  • WVP+ZLMediaKit+MediaServerUI实现摄像头GB28181推流播放录制

    本文主要介绍使用 WVP ZLMediaKit MediaServerUI 实现通过 GB28181 进行海康 大华 宇视等品牌的 IPC NVR DVR 接入 完成摄像头监控播放 控制 录制 准备工作 服务运行环境 Linux OS X
  • 分布式缓存原理----Hash环/一致性Hash原理/Hash槽

    Memcached 为分布式客户端做分发 hash环 TWY Redis 为分布式客户端做分发 hash环 Redis Cluster 点对点 2Khash槽 当前 Memcached Redis这类分布式kv缓存已经非常普遍 从本篇开始
  • Java jackson配置类,Java jackson工具类,SpringBoot Jackson类配置

    Java jackson配置类 Java jackson工具类 SpringBoot Jackson类配置 Copyright 蕃薯耀 2021 04 27 https blog csdn net w995223851 一 SpringBo
  • 第十八章 Post-Processing

    第十八章 Post Processing Post processing是指在场景渲染之后 使用一些图形技术对场景进行处理 比如 把整个场景转换为grayscale 灰度 样式或使场景中明亮的区域发光 本章将编写一些post process
  • 项目开发的前期准备(二)

    项目开发的前期准备 二 时序图用于描述对象之间的传递消息的时间顺序 即用例中的行为顺序 当执行一个用例时 时序图中的每条消息对应了一个类操作或者引起转换的触发事件 在 UML 中 时序图表示为一个二维的关系图 其中 纵轴是时间轴 时间延竖线
  • Selenium clear()方法无法清掉数据

    今天遇到了Selenium clear 方法无法清掉数据的问题 问题描述 页面看着清空了数据 保存时候还是存在 解决方法 WebElement ballast browser getWebDriver findElement By xpat
  • Qt之界面样式

    1 窗口 最小化 最大化 关闭按钮 显示状态自定义 setWindowFlags Qt CustomizeWindowHint setWindowFlags Qt WindowCloseButtonHint 只要关闭按钮 setWindow
  • NeuralNLP-NeuralClassifier的使用记录(一),训练预测自己的【英文文本多分类】

    NeuralNLP NeuralClassifier的使用记录 训练预测自己的英文文本多分类 NeuralNLP NeuralClassifier是腾讯开发的一个多层多分类应用工具 支持的任务包括 文本分类中的二分类 多分类 多标签 以及层
  • 存档&改造【01】模板导入&租户登录

    app101改造之前 想搞一个设备导入功能 想象中 实际上 再改改样式 关于数据的导入导出 可见博客 APEX数据源加载实现Excel表数据导入及自定义存储过程 王小小鸭的博客 CSDN博客https blog csdn net clove
  • swagger免token鉴权

    使用swagger很简单 但是在引入项目里面是由于 项目使用了Spring Security OAuth实现鉴权体系 所以浏览器访问swagger的时候一直报401 说没权限 网上的很多方案主要是两种方法 1 鉴权时过滤指定请求 但是我没弄
  • JUC(2): 阻塞队列+线程池(重点)+新时代程序员必会

    一 阻塞队列 ArrayBlockingQueue 一个由数组结构组成的有界阻塞队列 LinkedBlockingQueue 一个由链表结构组成的有界阻塞队列 PriorityBlockingQueue 一个支持优先级排序的无界阻塞队列 D