在一些非常狭窄的情况下,您可以实现一个java.util.concurrent.RejectedExecutionHandler,它可以满足您的需要。

RejectedExecutionHandler block = new RejectedExecutionHandler() {

rejectedExecution(Runnable r, ThreadPoolExecutor executor) {

executor.getQueue().put( r );

}

};

ThreadPoolExecutor pool = new ...

pool.setRejectedExecutionHandler(block);

现在。这是一个很坏的主意,原因如下

>它很容易死锁,因为池中的所有线程可能会死在你放入队列的东西是可见的。通过设置合理的保活时间来缓解这一点。

>任务不包裹你的执行者可能期望的方式。许多执行器实现在执行之前将其任务封装在某种跟踪对象中。看看你的来源。

> API强烈不建议通过getQueue()添加,并且可能在某些时候禁止。

一个几乎总是更好的策略是安装ThreadPoolExecutor.CallerRunsPolicy,它将通过在调用execute()的线程上运行任务来调节你的应用程序。

然而,有时一个拥有所有内在风险的封锁策略,实际上是你想要的。我会说在这些条件

>你只有一个线程调用execute()

>你必须(或想)有一个非常小的队列长度

>你绝对需要限制运行此工作的线程数量(通常出于外部原因),而调用者运行策略会破坏它。

>你的任务是不可预测的大小,所以调用者运行可能会引入饥饿,如果池暂时忙于4个短任务,你的一个线程调用执行卡住了一个大。

所以,我说。它很少需要,可能是危险的,但你去。

祝你好运。

java 队列已满_java – ThreadPoolExecutor当队列已满时阻塞?相关推荐

  1. java链式结构_java语言实现队列顺序结构与链式结构

    本文主要向大家介绍了java语言实现队列顺序结构与链式结构,通过具体的内容向大家展示,希望对大家学习java语言有所帮助. 队列的顺序存储结构实现 public class Queue{ privat ...

  2. java的poll方法_Java中的队列poll()方法示例

    使用poll()方法获取并删除Queue中的第一个元素. 创建一个队列-Queue q = new LinkedList(); 添加一些元素-q.add("abc"); q.add ...

  3. Java script 获取时间_java script时间代码 - 已解决 - 搜搜问问

    java script时间代码 25 [ 标签:java, script, 时间代码 ] ˊ︷.鏡゛ 2009-01-07 18:20 要实现一个效果~ 页面上显示时间是 某年某月某日某时 时间自动增 ...

  4. java slf4j日志级别_java - 在slf4j中设置运行时消息的日志级别 - 堆栈内存溢出

    ===============>>#1 票数:41 已采纳 使用slf4j无法做到这slf4j . 我想,缺少这个功能的原因是,几乎不可能为slf4j构建一个Level类型,它可以有效地映 ...

  5. java des加密解密_JAVA和c# 之间数据通讯时通过DES进行加密解密

    c#开发前端时调用java开发的接口,需要数据加密后通讯.两边都需要同时通过DES(BASE64)进行加解密. 代码如下 c#端: 加密 public static String Encrypt(St ...

  6. java json特殊字符处理_java json字符串传递给 js 时 特殊字符转义错误 研究

    一些换行 回车等符号需要转义 主要注意 单引号 与双引号. 一 如果js以 双引号接收字符串 则转单引号 "  至 \" 否则js报错 二 如果js以 单引号接收字符串 则转单引号 ...

  7. java -jar vm参数_java相关:运行jar程序时添加vm参数的方法

    java相关:运行jar程序时添加vm参数的方法 发布于 2020-3-15| 复制链接 下面小妖就为大家带来一篇运行jar程序时添加vm参数的方法.小妖觉得挺不错的,现在就分享给大家,也给大家做个参 ...

  8. java notifyall 唤醒顺序_Java的多线程NotiFyAll()唤醒线程时的顺序问题 | 学步园

    public class ThreadPriority {public static void main(String[] args) {Producer p = new Producer();p.s ...

  9. java null 写前面_java中判断对象为null时,null在前面还是后面

    因为目前只学习并使用java语言,所以这里主要是根据java来说的 Java中对null进行判断放在前后没有什么区别,只是为了代码规范,为了避免写代码时书写错误. 下面面两个测试Demo都没有报错.n ...

最新文章

  1. ResNet网络的训练和预测
  2. Smarty3 配置
  3. python3 正则表达式 匹配多个 单词 字符串
  4. Spring Boot进阶之Web进阶 代码推送的github上面去
  5. 多线程:实现Callable接口
  6. Oracle11g报bde,表现 – BDE与ADO在德尔福
  7. 数据分析20大基本分析方法技术总结【分析目的、分析案例、分析方法与思路】
  8. Linux故障解决(2)——使用yum安装netcat 及报错问题解决
  9. jQuery Deferred对象
  10. Spring-IOC 扩展点 BeanFactoryPostProcessor及其子接口解析
  11. vue element web 表单设计工具
  12. 声散射 matlab,逆向运用Fourier衍射定理快速预报水中目标的声散射特性
  13. Java之网络编程(一)
  14. 婚恋交友诈骗案例,交友要谨慎
  15. excel链接隐藏工作表_在Excel 2007和2010中隐藏和取消隐藏工作表和工作簿
  16. C++ string常用截取字符串方法
  17. HTTP性能极限优化
  18. 量化投资学习——汇率套利策略
  19. 看到自己的朋友圈,我和我的小伙伴都惊呆了
  20. 感动世界的50首歌和他们背后的故事1

热门文章

  1. arcgis flex aqi 3大util
  2. Web前端开发JavaScript基础(3)
  3. Queue+Stack(C++,标准库中的队列和栈)
  4. 利用@jsonView注解来实现自定义返回字段
  5. [转载] Java线程池框架源码分析
  6. Day3-----delayPrompt
  7. delphi——用线程创建一个窗体笔记
  8. Gridview行随鼠标变色
  9. 进口配额管理和出口配额管理_SAP采购管理模块中的quot;配额协议quot;应用详解...
  10. 【数据结构与算法】之深入解析“买卖股票的最好时机II”的求解思路与算法示例