Springboot线程数不断增加

时间:2019-07-08 17:54:48

标签: java multithreading spring-boot asynchronous

我有一个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

2 个答案:

答案 0 :(得分:2)

是的,它是无限的。由于@Async在默认情况下取决于SimpleAsyncTaskExecutor。它在其doc

中说
  

通过“ concurrencyLimit” bean属性支持限制并发线程。默认情况下,并发线程数是无限的。

答案 1 :(得分:1)

  

这是否意味着3432号之前的那些线程没有被重用?

是的。因为是不同的进程和线程。

您需要了解一个线程1触发...然后线程2触发。应用程序如何知道如何处理这些线程的ID?

  

还要消耗内存吗?

不。当然不是仅仅设置线程的ID并不是所有其他线程仍在运行。其他线程的生命周期无休止。