我已经向具有两个浏览器的Spring MVC项目发送了相同的请求,但是我得到了相同的threadlocal,所以threadlocal中的实例是相同的。为什么?
Threadlocal绑定到线程/进程,而不是绑定到会话。 JVM并不真正了解或关心Web会话的概念,这是一种更高级别的抽象。
具有两个会话的两个Web请求很可能由同一个线程处理。大多数服务器使用他们重用的线程池,而不是为每个请求或甚至会话创建新线程。如果第一个请求的处理在完成处理请求之后在threadlocal中留下了某些内容,那么下一个请求将在那里找到。
而是将每个会话所需的数据存储在HttpServletRequest.getSession()中。