public class BlockingSubmitExecutor {

    private ExecutorService executor =
new ThreadPoolExecutor(2, 2 * 2, 1, TimeUnit.MINUTES, new OfferBlockingQueue<>(10),
new ThreadFactoryBuilder().setNameFormat("push-scheduler-%d").build(),
new ThreadPoolExecutor.AbortPolicy()); private static final class OfferBlockingQueue<E> extends LinkedBlockingQueue<E> { public OfferBlockingQueue(int capacity) {
super(capacity);
} @Override
public boolean offer(@NotNull E e) {
try {
// ThreadPoolExecutor 底层workQueue调用的offer来入队.offer不会block,这里改成put,当队列满时可阻塞住submit
put(e);
return true;
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
return false;
}
} } @Test
public void test() {
for (int i = 0; i < 10; i++) {
int finalI = i;
executor.submit(() -> {
System.out.println("Thread start:" + finalI);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread finish:" + finalI);
});
} try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

参考:

https://www.codelast.com/原创-让threadpoolexecutor的workqueue占满时自动阻塞submit方法/

让ThreadPoolExecutor的workQueue占满时自动阻塞submit()方法的更多相关文章

  1. SQL Server-聚焦事务对本地变量、临时表、表变量影响以及日志文件存满时如何收缩(三十一)

    前言 接下来我们将SQL Server基础系列还剩下最后几节内容结束,后续再来讲解SQL Server性能调优,我们开始进入主题. SQL Server事务对本地变量影响 事务对变量影响具体是指什么意 ...

  2. Object之魔术函数__toString() 直接输出对象引用时自动调用

    __toString()是快速获取对象的字符串信息的便捷方式 在直接输出对象引用时自动调用的方法. __toString()的作用 当我们调试程序时,需要知道是否得出正确的数据.比如打印一个对象时,看 ...

  3. Condition对象以及ArrayBlockingQueue阻塞队列的实现(使用Condition在队满时让生产者线程等待, 在队空时让消费者线程等待)

    Condition对象 一).Condition的定义 Condition对象:与锁关联,协调多线程间的复杂协作. 获取与锁绑定的Condition对象: Lock lock = new Reentr ...

  4. QLayout布局时自动占满全部的空间。

    QLayout子类布局时会自动占满全部的空间,和一般需要多大空间占多大空间的要求不符合,很烦人. 案例: 本来一个容器简单的放几个组件会剩余很大的空间,就那么剩余就好.

  5. Android RelativeLayout wrap_content 而且 child view 使用 layout_alignParentBottom 时 RelativeLayout 高度会占满屏幕

    Android RelativeLayout wrap_content 而且 child view 使用 layout_alignParentBottom 时 RelativeLayout 高度会占满 ...

  6. 【Android 应用开发】Android中使用ViewPager制作广告栏效果 - 解决ViewPager占满全屏页面适配问题

    . 参考界面 : 携程app首页的广告栏, 使用ViewPager实现        自制页面效果图 : 源码下载地址: http://download.csdn.net/detail/han1202 ...

  7. Android中使用ViewPager制作广告栏效果 - 解决ViewPager占满全屏页面适配问题

    . 参考界面 : 携程app首页的广告栏, 使用ViewPager实现        自制页面效果图 : 源码下载地址: http://download.csdn.net/detail/han1202 ...

  8. video视频标签一些设置,包括封面、播放结束后的封面、视频占满屏幕的方式、视频播放暂停、展示控制栏、触发全屏播放事件

    video视频标签一些设置,包括封面.播放结束后的封面.视频占满屏幕的方式.视频链接.视频播放暂停.展示控制栏.触发全屏播放事件 <video id="video" auto ...

  9. Unity打开摄像头占满全屏

    Unity打开摄像头占满全屏 AR项目需求,Unity打开摄像头作为背景渲染占满全屏~ Unity对设备硬件操作的API并不是太友好~打开一个摄像头,渲染到屏幕上也都得自己写,虽然步骤少,提取摄像头t ...

随机推荐

  1. 请求转发(forward)和请求包含(include)的区别?

    请求包含的例子 第一个Servlet (DispatcherServlet) @Override protected void doGet(HttpServletRequest req, HttpSe ...

  2. kubernetes的架构

    kubernetes架构 k8s的物理结构是master/node模式,架构图如下所示 master一般是三个节点或者五个节点做高可用,根据集群规模来定,master高可用指的是对apiserver做 ...

  3. netcore获取配置文件的内容

    结合了好几个哥们的写法,最终我使用了这个版本,现在把我这个版本的写出来,如果该版本和您的版本类似或者一样,那可能是借鉴您的 using Microsoft.AspNetCore.Hosting; us ...

  4. 10.for循环

    for循环 语法: for(初始化; 布尔表达式; 更新) { //代码语句 } 初始化最先执行,可以声明一种类型,可初始化一个或多个循环控制变量,也可以是一个空语句. 布尔值判断,为 true 执行 ...

  5. Django Ajax序列化与反序列化

    序列化与反序列是最常用的功能,有时我们需要将一个表单组打包成Json格式等然后再提交给服务端,这样可以提高效率节约带框,如下是Django配合Ajax实现的序列化与反序列化,文件上传等操作. Ajax ...

  6. 从苏宁电器到卡巴斯基第27篇:难忘的三年硕士时光 V

    一发不可收拾 安全领域的公司都喜欢在看雪或者是吾爱破解这样的网站上发布招聘贴,因为这样的话很容易就能够招到适合的人才,也算是精准营销了.而像我这种想进入安全圈的,也会在这里发布自己的求职简历,以期望能 ...

  7. C#-几个STL相关

    C#结构体排序 1................................................. 声明 struct data { public string A; public ...

  8. Win64 驱动内核编程-23.Ring0 InLineHook 和UnHook

    Ring0 InLineHook 和UnHook 如果是要在R0里hook,作者的建议是InLine HOOK,毕竟SSDT HOOK 和 SHADOW SSDT HOOK比较麻烦,不好修改.目前R3 ...

  9. NumPy中文文档搬砖(划掉)学习笔记(1)

    原文地址 前言 况下加速Python中的操作运行时.适用于快速数值运算的一个选项是NumPy,它当之无愧地将自己称为使用Python进行科学计算的基本软件包. 当然,很少有人将50微秒(百万分之五十秒 ...

  10. MySQL导入与导出SQL

    一.导入SQL 方法一: (1)选择数据库 use databaseName; (2)设置数据库编码 set names utf8; (3)导入数据(注意sql文件的路径) source **.sql ...