提交时是使用防抖还是节流_使用BlockingExecutor进行节流任务提交

提交时是使用防抖还是节流

JDK的java.util.concurrent.ThreadPoolExecutor允许您将任务提交到线程池,并使用BlockingQueue来保存提交的任务。 如果要提交的任务有数千个,请指定一个“绑定”队列(即最大容量的队列),否则JVM可能会用完内存。 您可以设置RejectedExecutionHandler来处理队列已满时发生的情况,但是仍然有待提交的任务。 这里是你展示如何使用一个简单的例子ThreadPoolExecutor具有BlockingQueue容量1000 CallerRunsPolicy确保,当队列已满时,其他任务将由提交线程处理。

int numThreads = 5;
ExecutorService exec = new ThreadPoolExecutor(5, 5, 0L, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(1000),new ThreadPoolExecutor.CallerRunsPolicy());

这种方法的问题在于,当队列已满时,向池提交任务的线程会变得忙于执行任务本身,在此期间,队列可能会变空并且池中的线程可能会变得空闲。 这不是很有效。 我们希望一直保持线程池繁忙,并且工作队列始终处于饱和状态。 有各种解决方案。 其中之一是使用自定义的Executor ,当队列已满时,该Executor将阻止(从而防止其他任务提交到池中)。 BlockingExecutor的代码如下所示。 它基于Brian Goetz,2006年的BoundedExecutor示例。Java Concurrency in Practice。 1版。 Addison-Wesley专业。 (第8.3.3节) 。

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.Semaphore;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** An executor which blocks and prevents further tasks from* being submitted to the pool when the queue is full.* <p>* Based on the BoundedExecutor example in:* Brian Goetz, 2006. Java Concurrency in Practice. (Listing 8.4)*/
public class BlockingExecutor extends ThreadPoolExecutor {private static final Logger LOGGER = LoggerFactory.getLogger(BlockingExecutor.class);private final Semaphore semaphore;/*** Creates a BlockingExecutor which will block and prevent further* submission to the pool when the specified queue size has been reached.** @param poolSize the number of the threads in the pool* @param queueSize the size of the queue*/public BlockingExecutor(final int poolSize, final int queueSize) {super(poolSize, poolSize, 0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());// the semaphore is bounding both the number of tasks currently executing// and those queued upsemaphore = new Semaphore(poolSize + queueSize);}/*** Executes the given task.* This method will block when the semaphore has no permits* i.e. when the queue has reached its capacity.*/@Overridepublic void execute(final Runnable task) {boolean acquired = false;do {try {semaphore.acquire();acquired = true;} catch (final InterruptedException e) {LOGGER.warn("InterruptedException whilst aquiring semaphore", e);}} while (!acquired);try {super.execute(task);} catch (final RejectedExecutionException e) {semaphore.release();throw e;}}/*** Method invoked upon completion of execution of the given Runnable,* by the thread that executed the task.* Releases a semaphore permit.*/@Overrideprotected void afterExecute(final Runnable r, final Throwable t) {super.afterExecute(r, t);semaphore.release();}
}

参考:我们的JCG合作伙伴 Fahd Shariff在fahd.blog博客上使用BlockingExecutor进行节流任务提交 。

翻译自: https://www.javacodegeeks.com/2013/11/throttling-task-submission-with-a-blockingexecutor.html

提交时是使用防抖还是节流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机硬盘怎么设置ntfs,Windows7系统如何把磁盘格式转换为NTFS的方法

今天朋友匆匆忙忙来找我&#xff1a;他的电脑因为某种情况&#xff0c;需要吧磁盘转换成ntfs格式&#xff0c;该怎么转换?Win7系统、利用系统自带工具转换1.我们打开我们的电脑磁盘&#xff0c;大家发现小编的电脑G盘是FAT32格式的&#xff0c;小编现在要把G盘转换为NTFS格式。…

ace unlck工具下载_压缩工具:WinRAR 曝出代码执行漏洞,该升级了

作为享誉全球的装机必备工具&#xff0c;「压缩软件」这四个字基本可以认为是 WinRAR 的专有名字了。只要有 PC 的地方&#xff0c;几乎都能看到 WinRAR 的身影。不过这款软件最近却被曝出了一个有19年历史的代码执行漏洞。WinRAR 宣称在全球拥有超过5亿的用户&#xff0c;目前…

可重复使用的MicroProfile Health探针

MicroProfile Health API是一个非常基本的API&#xff0c;它基于一个或多个Health Probe报告您的服务状态。 这在某些服务器或群集控制器需要决定是否以及何时重新启动实例的情况下非常有用。 在应用程序中使用MicroProfile Health API就像实现一个&#xff08;或多个&#xf…

关于计算机航天生物的想像作文,未来的航天器想象作文750字

未来的航天器想象作文750字到了2999年&#xff0c;人类发明出了一种新型的航天器。这种航天器机身类似我们现在的轿车&#xff0c;机身长10米&#xff0c;高度最高达4&#xff0c;最低达0.5米&#xff0c;材料是来自外星的软体金属&#xff0c;上面有一条会发光的物体&#xff…

哈罗单车怎么关锁还车_记者体验临沂共享单车定点还车 停错地方关不上锁

共享单车在给市民出行带来便利的同时&#xff0c;也引发了停放秩序混乱、妨碍市民通行等问题&#xff0c;为规范共享单车停放&#xff0c;兰山区在临沂市率先试点共享单车定点停放&#xff0c;并在特定区域施划共享单车定点停放区。据悉&#xff0c;临沂市兰山区第一批272个共享…

船舶导航软件测试,北斗卫星船舶定位及信息通信应用

《北斗卫星船舶定位及信息通信应用》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《北斗卫星船舶定位及信息通信应用(9页珍藏版)》请在人人文库网上搜索。1、海上船舶监控管理系统一、用户需求通过舰艇中的北斗终端机实时传输经纬度坐标&#xff0c;依托电子海图实时…

工业机器人 答案 韩建海_中国将连续8年成为工业机器人第一大市场,还将持续多久?...

2020年&#xff0c;中国工业机器人销售量&#xff0c;将会由负转正&#xff0c;销量预计再次突破15万台。2019年&#xff0c;约为14.4万台的销量。2013年——2020年中国工业机器人销量这已经是第八个年头&#xff0c;中国位居全球工业机器人销量第一大市场。工业机器人打磨工作…

java命令行参数工具_Java方法中的参数太多,第8部分:工具

java命令行参数工具在我的系列文章的前七篇文章中&#xff0c;有关处理Java方法中期望的参数过多的内容集中在减少方法或构造函数期望的参数数量的替代方法上。 在本系列的第八篇文章中&#xff0c;我将介绍一些工具&#xff0c;这些工具可帮助您确定可能存在过多参数的情况&am…

计算机电路的基本罗门,模拟电路设计经验12条

原标题&#xff1a;模拟电路设计经验12条模拟电路的设计是工程师们最头疼、但也是最致命的设计部分&#xff0c;尽管目前数字电路、大规模集成电路的发展非常迅猛&#xff0c;但是模拟电路的设计仍是不可避免的&#xff0c;有时也是数字电路无法取代的&#xff0c;例如&#xf…

工具 每分钟_black: 一个不妥协的Python代码格式化工具

代码可读性是评判代码质量的标准之一&#xff0c;有一个衡量代码质量的标准是 Martin 提出的 “WFT” 定律&#xff0c;即每分钟爆出 “WTF” 的次数。你在读别人代码或者做 Code Review 的时候有没有 “WTF” 冲动呢&#xff1f;为了帮助开发者统一代码风格&#xff0c;Python…

使用Spring Rest和Spring Data JPA和H2以及Spring Boot示例的Restful API

你好朋友&#xff0c; 在本教程中&#xff0c;您将学习以下内容&#xff1a; 1.在Spring Boot中配置Spring Rest&#xff0c;Spring Data JPA和H2 2.使用Spring Boot创建Springful服务端点的Spring Rest&#xff0c;Spring Data JPA和H2的示例 3.使用Swagger测试Restful端点…

计算机IP地址pin,打印机的ip地址在机身上哪里,打印机的pin在哪看

打印机的ip地址在机身上哪里&#xff0c;打印机的pin在哪看时间&#xff1a;2021-04-19 10:38:04打印机是我们日常工作中必备的公办用品&#xff0c;但是对于刚接触打印机的电脑小白来说&#xff0c;打印机的网络设置可不简单&#xff0c;比如IP地址、pin码&#xff0c;他们可能…

开机启动失败_电脑常见开机引导错误的解决方法

电脑在开机启动过程中&#xff0c;经常会出现开机失败的故障&#xff0c;开机失败比较常出现在开机引导项错误的问题上&#xff0c;比如引导文件没了&#xff0c;硬盘有问题等等&#xff0c;有些小问题重启几遍可以解决&#xff0c;有些问题就只能修复。这边小编跟大家整理分享…

2020非全日计算机博士,在职攻读博士是不是非常难,免考在职博士和非全日博士有什么不同...

博士的含金量我们自然不容忽视&#xff0c;但博士又不是说三天打鱼两天晒网就可搞定的&#xff0c;都是要经过长久的沉淀以及耐心才能坚持下来的&#xff0c;博士少说也要读个四到五年方可毕业&#xff0c;但也有个别优秀的三年内就完成学业待着自己的成功找到了丰厚的薪资待遇…

cru使用教程_教程|Crust 测试网 Maxwell 1.0 用户指南

“Crust 实现了去中心化存储的激励层协议&#xff0c;适配包括 IPFS 在内的多种存储层协议&#xff0c;并对应用层提供支持。同时 Crust 的架构也有能力对去中心化计算层提供支持&#xff0c;构建分布式云生态。”Crust Network 首个公开测试网——Maxwell 1.0 版本正式上线&am…

分数乘法计算机题,《分数乘法》测试题

第1篇&#xff1a;《分数乘法》测试题一、填空&#xff1a;1、3/103/103/10()/()()/()7/207/207/207/20()/()()/()2、选择“&#xff1e;、&#xff1c;或&#xff1d;”。1/410&#xff1e;&#xff1c;1/43/51&#xff1e;&#xff1c;3/57/120&#xff1e;&#xff1c;7/127…

Hibernate事实:有利于双向集vs列表

Hibernate是一个很棒的ORM工具&#xff0c;它极大地简化了开发&#xff0c;但是如果您想正确地使用它&#xff0c;则有很多陷阱。 在大中型项目中&#xff0c;双向父子关联非常常见&#xff0c;这使我们能够浏览给定关系的两端。 在控制关联的持久/合并部分时&#xff0c;有两…

创建二级索引_Mysql创建索引

零:文章概要这篇文章&#xff0c;主要是和大家一起去了解 索引&#xff0c;然后一起使用CREATE INDEX语法给数据库中的表创建一个索引。一&#xff1a;先拿电话薄做个类比假如&#xff0c;一个电话薄里面包含了一个城市的所有人的姓名和电话号码。那么&#xff0c;想找到Bob Ca…

转hdmi_苹果本轻松接大屏,毕亚兹雷电接口转HDMI/VGA转换器评测

作为上班族&#xff0c;日常开会加出差&#xff0c;经常需要用到笔记本连接投影仪投屏。很多小伙伴为了高效办公&#xff0c;使用的都是性能强劲但是设计轻薄的笔记本产品&#xff0c;最常见的就是苹果笔记本。但是比较尴尬的是&#xff0c;目前可以使用的绝大部分苹果笔记本电…

计算机专业教学工作小结,计算机专业教学的工作总结

本人在教育教学上&#xff0c;爱岗敬业&#xff0c;严谨治教&#xff0c;热爱学生&#xff0c;努力做到把学生教好&#xff0c;让学生成功成才&#xff0c;优秀教师应有的职责。因此我在教育教学方面注意了以下几个问题&#xff0c;现作工作总结如下&#xff1a;一、思想方面本…