我们需要并行运行任务,所以我们使用Spring@Async功能。为了提供执行器配置,我们正在创建一个执行器bean。
@Bean(name = "async")
public Executor threadPoolTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(2);
executor.setMaxPoolSize(2);
executor.setQueueCapacity(5);
executor.setThreadNamePrefix("MyExecutor-");
executor.initialize();
return executor;
}
一旦并行任务的数量超过maxpoolSize队列大小,下一个任务提交就会失败,并出现rejectedExecutionexception。
为了克服这一问题,我们从源html" target="_blank">代码研究了调用方中止策略:https://www.baeldung.com/java-rejectedexecutionhandler它提供了在队列和线程已满的情况下,主线程本身运行任务的功能。
设置需要:executor。setRejectedExecutionHandler(新的ThreadPoolExecutor.CallerRunPolicy());
Q1.我需要了解的是,ThreadPoolTaskExecator使用的是LinkedBlock队列,我的期望是,一旦最大池线程和队列大小已满并被占用,主线程将被阻塞,同时提交一个新任务,但相反,它是失败的拒绝例外,即使阻塞队列是目前在ThreadPoolTaskExec导师?
问题2。为了克服这一问题,我们如何实现一种阻塞机制,使main在提交新任务时不会失败,也不会自行运行(如executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunPolicy()),但会阻塞队列中的可用空间以将任务放入队列?
无限期地阻塞主线程可能会导致死锁情况。这就是为什么要为应用程序用户提供一个处理程序,以决定当线程池队列容量超过时应该采取什么行为。
正如下面的线程中所讨论的,可以实现所需阻塞行为的各种实现,但应该注意阻塞的时间和其他死锁场景。
队列已满时ThreadPoolExecutor块?
我在jetty异步超文本传输协议客户端上运行以下程序。 我得到的错误是 请在这方面帮助我摆脱错误::
我有一个多项目gradle构建,Spring Boot按照默认gradle约定进行结构化。 我目前的项目是(A)将gradle从5. x升级到7.3. x,(B)使用带有Spring Boot的嵌入式Tomcat。 这是一个已经存在很多年的项目,是Spring Boot,但是传统上一直作为一个战争文件部署在Tomcat中。 我已经按照gradle迁移指南将gradle升级到7.3.3,并正确构建了
问题内容: 我正在尝试运行elasticsearch,并使用以下命令尝试放置数据- 但我收到以下错误- 我试图通过增加队列大小- 但是我仍然遇到同样的错误。 问题答案: 您遇到的问题是因为 批量操作队列 已满。 节点ES具有许多线程池,包括通用线程,搜索线程,索引线程,建议线程,批量线程等。在您的情况下,问题在于批量操作队列已满。 尝试调整批量操作的线程池的队列大小: 或减少一次发送的批量操作数量
我正在使用默认配置,同时添加在我的ubuntu 12.04计算机上安装了nginx的特定目录。 我只需要一个简单的静态nginx服务器来提供该目录之外的文件。但是,请检查我明白了 我已经在上完成了,我已经将它们设置为。我不知道还需要设置什么。
我使用Java连接MySQL和Json将数据发送到android,当我通过URL地址将数据从Java发送到Json时: 一切都很好,但是当我在Android中解析数据时,我收到了一个错误结果,如下所示: logcat: (192.168.1.221)IP地址是我的PC机,如果我从192.168.1.221更改为本地主机,我仍然会收到相同的错误。
我读过类似的问题,答案都围绕着纠正这样的一行: 不幸的是,我读过的书中没有什么能解决这个问题。 在我的index.html中,我有: 在我的app.js im中使用: 当我访问该页时,控制台记录 LocalHost/:1拒绝应用来自“http://localhost:3000/public/css/style.css”的样式,因为它的MIME类型(“text/html”)不是受支持的样式表MIME