0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CallerRunsPolicy拒绝策略的相关知识

Android编程精选 来源:CSDN博客 作者:打不死Gin 2021-09-29 14:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

来源丨blog.csdn.net/dabusiGin/article/details/105323796

在学习CallerRunsPolicy拒绝策略的时候,搜索了很多相关的知识,其他博主的描述是这样的:

第1种:

d023ed82-205b-11ec-82a8-dac502259ad0.png

第2种:

d03abec2-205b-11ec-82a8-dac502259ad0.png

第3种:

d04cab5a-205b-11ec-82a8-dac502259ad0.png

第4种:JDK文档(汉化版)

d09a2506-205b-11ec-82a8-dac502259ad0.png

他们的描述让我看的很懵逼,特别是第3种,仔细看他的测试代码,并没有用CallerRunsPolicy,而是用的AbortPolicy拒绝策略。。。。这是一篇高浏览量的博文,而且多人转载。

其中上面几种情况中写到的“execute方法的调用线程”、“调用者线程”、“execute函数的上层线程”、“execute本身的线程”就是指的主线程,举个例子如下图所示,主线程就是平时执行main方法中代码的线程。

d0b15028-205b-11ec-82a8-dac502259ad0.png

再通过一个例子详细说明:

class MyTask implements Runnable {

private String id;

public MyTask(String id) {

this.id = id;

}

public void run() {

System.out.println(id);

}

}

public class RejectPolicy {

public static void main(String[] args) {

ExecutorService es = new ThreadPoolExecutor(2, 2, 0L, TimeUnit.MILLISECONDS,

new ArrayBlockingQueue《Runnable》(3), Executors.defaultThreadFactory(),

new ThreadPoolExecutor.CallerRunsPolicy());

MyTask t1 = new MyTask(“id:1”);

MyTask t2 = new MyTask(“id:2”);

MyTask t3 = new MyTask(“id:3”);

MyTask t4 = new MyTask(“id:4”);

MyTask t5 = new MyTask(“id:5”);

MyTask t6 = new MyTask(“id:6”);

MyTask t7 = new MyTask(“id:7”);

es.execute(t1);

es.execute(t2);

es.execute(t3);

es.execute(t4);

es.execute(t5);

es.execute(t6);

es.execute(t7);

}

}

这里使用主要参数是:核心线程数为2、最大线程数为2、有界队列(容量为3)、默认线程工厂、CallerRunsPolicy拒绝策略。

运行结果如下:

id:1

id:2

id:3

id:4

id:6

id:5

id:7

可以看到所有的任务都执行了,没有真正意义上被拒绝的。

学习资料Java进阶视频资源

代码中定义了核心线程数为2的线程池,一共有7个任务要执行,其中2个任务创建线程执行去了,3个任务放入了任务队列(workQueue)。

当提交到第6个任务的时候,会触发拒绝策略,在这里我们配置了CallerRunsPolicy策略,主线程直接执行第六个任务去了,不再向下执行main方法中的es.execute(t7)这段代码。

也就是说,在本程序中最多会有3个任务在执行,3个在等待。由此限制了线程池的等待任务数与执行线程数。所以JDK文档才会说:“这提供了一个简单的反馈控制机制,将降低新任务提交的速度”。

d0fc715c-205b-11ec-82a8-dac502259ad0.png

我的一点个人理解,希望能有助理解。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理程序
    +关注

    关注

    0

    文章

    3

    浏览量

    5531
  • 线程池
    +关注

    关注

    0

    文章

    57

    浏览量

    7315

原文标题:大多数人不知道的:线程池CallerRunsPolicy()拒绝策略

文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    服务器远程连接超时以及拒绝连接的真实缘由和解决办法

    一、为啥服务器远程连接老是出现“超时”或者“拒绝连接”? 不少企业在用云服务器或海外服务器时,常会碰到挺闹心的事儿,像远程连接出现“连接超时”“拒绝连接”“无法访问”“端口不可达”这类状况。而且
    的头像 发表于 11-19 15:34 449次阅读

    A21:分立元件知识与应用专题--电容知识及应用案例

    分立元件知识与应用专题--电容知识及应用案例
    的头像 发表于 07-15 19:22 315次阅读
    A21:分立元件<b class='flag-5'>知识</b>与应用专题--电容<b class='flag-5'>知识</b>及应用案例

    线控转向直流无刷电机的控制策略研究

    【摘要】建立了线控转向系统机械路感模拟和直流无刷电机的数学模型。针对线控转向系统需要直流无刷电机响应快、鲁性高的要求,采用双闭环控制策略,其中电流环采用PID控制,转角环采用滑膜变结构控制。通过
    发表于 07-15 15:22

    芯片相关知识交流分享

    生存被动局面的有效途径。光通信系统设备商,对国外的依赖程度还是比较高,其所需的核心光电子器件,仍是需要依赖进口。 注:资料来源于网络,只限分享交流相关行业知识,不代表做出任何承诺,如有不妥,麻烦联系删帖
    发表于 07-03 09:54

    双三相感应电机SVPWM的新型过调制策略

    摘要:过调制策略能够提高逆变器输出电压范围和品质,从而提高电机输出转速范围和转矩特性。针对双三相感应电机空间矢量脉宽调制(SVPWM)算法过调制区域有限,分区实现复杂,内存占用率大等问题,提出一种
    发表于 06-19 11:10

    轮毂电机HEV能量管理策略优化研究

    纯分享帖,需要者可点击附件免费获取完整资料~~~*附件:轮毂电机HEV能量管理策略优化研究.pdf【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,删除内容!
    发表于 06-10 13:16

    B10 BMS技术知识初探(上、下)

    商用的最核心技术之一。本课程对BMS技术相关知识, 进行概念级、扫盲级讲解;让所有关注、关心、以及想进入新能源行业发展的朋友们,能够对BMS技术知识有最基本的 认识;也希望通过本课程的引导,让
    发表于 05-02 11:04

    电机大范围调速的综合电压调制策略

    针对电动汽车要求驱动电机具有大范围调速要求和目前任何单种基本调制方式都无法做到全调制比范围内性能最优的问题,提出了一种综合的调制策略:在低调制比阶段使用传统的SVPWM策略,在高调制比阶段
    发表于 04-01 14:51

    永磁同步电机矢量控制策略分析

    本文通过矢量控制策略采用 id=0 控制方案快速准确地控制转矩,实现调速系统具有较高的动态性能。并利用了 Matlab 工具对永磁同步电机矢量控制系统在空载起动、转速突变、负载突变进行了仿真研究。 点击附件可直接打开查看全文*附件:永磁同步电机矢量控制策略分析.docx
    发表于 03-20 12:57

    变频器维修相关知识

    变频器维修是一项涉及理论知识、实践经验与操作水平的工作,其维修过程需要遵循一定的步骤和方法。以下是一些关于变频器维修的相关知识: 一、变频器维修的基本步骤 1. 静态测试: ● 整流电路测试
    的头像 发表于 03-09 07:40 1104次阅读
    变频器维修<b class='flag-5'>相关</b><b class='flag-5'>知识</b>

    《AI Agent 应用与项目实战》阅读心得3——RAG架构与部署本地知识

    应用。第六章深入探讨了RAG架构的工作原理,该技术通过在推理过程中实时检索和注入外部知识来增强模型的生成能力。RAG架构的核心是检索器和生成器两大模块,检索器负责从知识库中找到与当前查询相关的文档片段,生成器
    发表于 03-07 19:49

    【第一章 透传策略】手把手教你玩转新版正点原子云

    【第一章 透传策略】手把手教你玩转新版正点原子云 1. 本次实验使用正点原子D40 Mini 4G Cat1 DTU数传模块 1.1 D40数传模块资料 具体使用和资料下载可到:D40 Mini
    发表于 03-05 16:52

    嵌入式系统存储的软件优化策略

    嵌入式希望通过对存储相关知识的分享,助力大家构建完整的存储知识体系框架。 首先,嵌入式场景中常用来存储数据的介质分为两类: ·Managed NAND,以eMMC(embedded Multi-Media
    发表于 02-28 14:17

    渊亭KGAG升级引入“高级策略推理”

    为了突破现有AI技术在决策推理方面的局限,渊亭科技对其知识图谱分析平台KGAG进行了最新升级,创新性地引入了“高级策略推理”模式。这一模式的引入,实现了“大模型×知识图谱×专家策略×动
    的头像 发表于 02-14 15:07 807次阅读

    设计模式-策略模式

    作者:京东工业 孙磊 一、概念 策略模式(Strategy Pattern)也称为(Policy Parttern)。 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变换
    的头像 发表于 01-08 13:47 555次阅读
    设计模式-<b class='flag-5'>策略</b>模式