了解Tomcat / Spring Boot多线程

时间:2019-01-16 12:18:11

标签: java spring multithreading spring-boot tomcat

我已经在spring-boot的基础上创建了一个简单的Web应用程序。它获取请求,执行一些阻止操作(例如写入从1到10_000的控制台编号),并返回简单的响应。
当我开始使用JVisual VM对其进行测试时,我注意到线程以一种奇怪的方式工作。
首先,在低负载的情况下,它们不能同时工作,而是依次工作:

load test 1

如果我尝试高负载应用程序,则Tomcat会创建新的线程(据我所知这是可以的),并且在此之后线程会同时工作:

load test 2


我已使用Netling应用来测试应用。它只是对localhost的简单请求,没什么特别的。
您能否解释一下为什么以这种方式工作?或提供一些带有说明的链接。
预先感谢!

1 个答案:

答案 0 :(得分:1)

我了解问题的根源。
在JVisualVM上,我看到所有线程都被彼此阻塞,但是我不知道为什么。现在很明显-我已经将system.out.println()用作块操作,但是线程无法同时使用它,控制台已锁定。
我已将控制台输出更改为文件输出(使用线程名作为文件名以防止锁定),然后再次启动该应用程序。现在可以正常工作了。

愚蠢的错误,但我希望这对某人有用:)

enter image description here