在日志中,我可以看到即时信息:
PRE !!!!!!!!!!!!!
大约15瑞典克朗后。下5个:PRE !!!!!!!!!!!!! PRE !!!!!!!!!!!!! PRE !!!!!!!!!!!!! PRE !!!!!!!!!!!!! PRE !!!!!!!!!!!!!
我认为这是浏览器的问题/局限性。
当请求到达servlet容器(例如Tomcat)时,将从池中检索一个线程来为其提供服务。这意味着每个请求都有其自己的线程,并且将在整个生命周期内使用该线程(即:您发送了响应)。
这就是为什么我认为这是浏览器强加的限制。
看一看:
@RestController
@RequestMapping(path = "test")
public class TestController {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@GetMapping
public ResponseEntity<Object> handletest() throws InterruptedException {
log.info("Thread {} started", Thread.currentThread().toString());
Thread.sleep(5000);
log.info("Thread {} finished", Thread.currentThread().toString());
return ResponseEntity.ok("EXECUTED!!");
}
}
这将立即记录
2019-10-17 09:36:37.514 INFO 10324 --- [nio-8083-exec-1] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-1,5,main] started
现在,在所有5个请求(5个选项卡)收到响应之后(看看时间- ):
2019-10-17 09:36:37.514 INFO 10324 --- [nio-8083-exec-1] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-1,5,main] started
2019-10-17 09:36:42.515 INFO 10324 --- [nio-8083-exec-1] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-1,5,main] finished
2019-10-17 09:36:42.551 INFO 10324 --- [nio-8083-exec-2] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-2,5,main] started
2019-10-17 09:36:47.551 INFO 10324 --- [nio-8083-exec-2] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-2,5,main] finished
2019-10-17 09:36:47.559 INFO 10324 --- [nio-8083-exec-4] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-4,5,main] started
2019-10-17 09:36:52.560 INFO 10324 --- [nio-8083-exec-4] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-4,5,main] finished
2019-10-17 09:36:52.571 INFO 10324 --- [nio-8083-exec-5] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-5,5,main] started
2019-10-17 09:36:57.572 INFO 10324 --- [nio-8083-exec-5] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-5,5,main] finished
2019-10-17 09:36:57.582 INFO 10324 --- [nio-8083-exec-6] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-6,5,main] started
2019-10-17 09:37:02.584 INFO 10324 --- [nio-8083-exec-6] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-6,5,main] finished
继续,打开浏览器,输入URL,按ENTER
并开始按CTRL
+ R
。
。
因此将有1 + 4个请求(第一个(带有ENTER
)和随后的4个请求(带有CTRL
+ R
))
我可以看到所有5个线程开始并行运行:
2019-10-17 09:46:30.149 INFO 10324 --- [nio-8083-exec-9] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-9,5,main] started
2019-10-17 09:46:30.471 INFO 10324 --- [io-8083-exec-28] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-28,5,main] started
2019-10-17 09:46:30.713 INFO 10324 --- [io-8083-exec-29] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-29,5,main] started
2019-10-17 09:46:30.981 INFO 10324 --- [io-8083-exec-10] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-10,5,main] started
2019-10-17 09:46:31.244 INFO 10324 --- [nio-8083-exec-1] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-1,5,main] started
继续,尝试使用Postman(或任何其他http客户端)和浏览器。
使用浏览器发送请求,ALT
+ TAB
使用Postman发送请求。
我可以看到两个线程开始并行运行(第一个请求来自浏览器,第二个请求是使用Postman发出的):
2019-10-17 09:50:31.663 INFO 10324 --- [nio-8083-exec-5] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-5,5,main] started
2019-10-17 09:50:32.587 INFO 10324 --- [nio-8083-exec-9] b.c.d.m.controller.TestController : Thread Thread[http-nio-8083-exec-9,5,main] started
通过查看这些测试,我确信这是浏览器强加的限制。