gpt4 book ai didi

java - 使用 Spring @Async 和 ThreadPoolTask​​Scheduler with pool-size=1

转载 作者:行者123 更新时间:2023-12-01 14:06:21 27 4
gpt4 key购买 nike

我们在基于 Spring 的 Web 应用程序中有一个服务实现,它增加了数据库中的一些统计计数器。由于我们不想弄乱用户的响应时间,因此我们使用 Spring 的 @Async 将它们定义为异步:

public interface ReportingService {

@Async
Future<Void> incrementLoginCounter(Long userid);

@Async
Future<Void> incrementReadCounter(Long userid, Long productId);
}

而spring任务配置是这样的:
<task:annotation-driven executor="taskExecutor" />
<task:executor id="taskExecutor" pool-size="10" />

现在,有了 pool-size="10" ,当两个线程尝试创建相同的包含计数器的初始记录时,我们会遇到并发问题。

在这里设置 pool-size="1" 是个好主意吗?避免那些冲突?这有任何副作用吗?我们有很多地方可以触发异步操作来更新统计信息。

最佳答案

与单个线程处理它们的速度相比,副作用将取决于将任务添加到执行器的速度。如果每秒添加的任务数大于单个线程在一秒钟内可以处理的数量,则队列的大小会随着时间的推移而增加,直到最终出现内存不足错误。

查看 执行人本页栏目 Task Execution .他们声明拥有一个无界队列不是一个好主意。

如果您知道您可以比添加任务的速度更快地处理任务,那么您可能是安全的。如果没有,您应该添加队列容量并在队列达到此大小时处理输入线程阻塞。

关于java - 使用 Spring @Async 和 ThreadPoolTask​​Scheduler with pool-size=1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17278329/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com