最近在看并发操作时候,例如jmeter进行接口压测(本地自己的springboot2的环境),发现一个有趣的现象,就是关于线程http-nio-8080-exec-1,http-nio-8080-exec-2等等的出现。但是这个线程数不管我的压测数是多少这个线程数不会超过10.抱着好奇的心去搜索了一下相关的文章,但是没有看到比较合适的。然后就只有自己去跟了一下源码。在此自己总结一下。
两个问题:
1、这个http-nio-8080-exec东西是怎么来的
2、为什么这个线程数不超过10
把这两个问题其实可以一起归为一个问题来跟代码进行解决:
因为我们知道,一般在自定义线程或者线程池名称的时候,我们是可以自己去设置相关的线程名字的。这个名称的来源就是如下:
在请求线程经过Tomcat时,会进入到org.apache.coyote.AbstractProtocol,这个方法,这是一个抽象类,可以看出其实这里就是在进行一个名称和端口号的拼接操作。getNamePrefix()的具体实现是在org.apache.coyote.http11.Http11NioProtocol
private String getNameInternal() {
StringBuilder name = new StringBuilder(getNamePrefix());
name.append('-');
if (getAddress() != null) {
name.append(getAddress().getHostAddress());
name.append('-');
}
int port = getPortWithOffset();