java - Springboot线程数不断增加
问题描述
我有这个springboot应用程序,它大量使用带有@Async
注释的线程,我没有配置它,ThreadPoolTaskExecutor
因为从我的想法来看,当线程说thread-1
完成任务时,其他任务可以使用这个thread-1
。
但从我从日志中观察到的情况,似乎有时线程数会上升到数千个,如下所示:
2019-07-09 01:48:59.259 INFO 12592 --- [TaskExecutor-1] .s.d.r.c.TestingService :Something is running.
...... //Other threads running
2019-07-09 09:48:59.259 INFO 12592 --- [TaskExecutor-3432] .s.d.r.c.TestingService :Something is running.
我怀疑这些线程都没有被重用。
这是否意味着编号之前的那些线程3432
没有被重用?还消耗内存?
更新:
我实际上检查了日志,例如thread-255
完成了,但是该线程中不再安排任何任务。
2019-07-08 22:23:37.407 INFO 1 --- [TaskExecutor-255] c.d.v.c.j.impl.LoadSomethingAsync : Something is running
解决方案
是的,它是无限的。默认情况下@Async
取决于。SimpleAsyncTaskExecutor
它在其文档中说
支持通过“concurrencyLimit”bean 属性限制并发线程。默认情况下,并发线程数是无限的。
推荐阅读
- linux - 尝试使用 docker-compose 连接到映射端口时“等待本地主机”。iptables 或 ipv6 的问题?
- replace - 查找并用另一个词替换一个词
- javascript - 获取 A 的值
- pgadmin-4 - 如何在 Linux 上将 pgAdmin 4 作为桌面应用程序启动?
- vim - vi 编辑器文本对齐
- python - 如何使用多个生成的值在 python 中绘制图形?
- r - R:使用 geom_tile() 和 scale_fill_gradientn() 使用颜色划分热图
- javascript - 仅当从服务器完成调用或用户是管理员时才允许方法
- python - 从气流中的 BigQueryOperator 获取结果
- python - python redis-queue:来自文档的简单示例不起作用