您好,匿名用户

ServletContext 和 spring ApplicationContext 的线程问题

0 投票

看到 spring 的 ServeltContextListener 加载方式时,有个问题。

不知道我的理解对不对:

tomcat 下一个 web 应用目录对应一个 ServeltContext 单例,假设使用 Servelt 处理请求,那一个 Servelt class 其实在 tomcat 容器中也是单例,但是为了提升并发性能,这个单例可能会被多个线程使用。

再到 spring ,在 servlet 被实例化这一步之前, spring 的 ContextLoaderListener 监听器被调用,通过 org.springframework.web.context.ContextLoader 创建 ApplicationContext 对象

问题主要在 ApplicartionContext 这个地方:

这个应用上下文是多线程的吗?因为看到了 static volatile 的 currentContext 和 ConcurrentHashMap 的 currentContextPerThread ,但是为什么还要保存一份当前线程 ContextClassLoader 管理的 WebApplicationContext ?直接用 Heap 区的那一份 currentContext 不行吗?还有,其它线程的 WebApplicationContext 又是在什么时机被创建出来的呢?

用户头像 提问 2017年 3月3日 @ Orianna 下士 (913 威望)
分享到:

你的回答

隐私保护: 您的邮箱仅用于发送系统通知。
请输入验证码:
    图片验证码看不清?
登录注册后不会被要求输入验证码。

提一个问题:

相关问题

0 投票
1 回复 239 阅读
用户头像 提问 2014年 12月19日 @ Twitch 中士 (1,030 威望)
0 投票
1 回复 41 阅读
0 投票
0 回复 33 阅读
0 投票
1 回复 73 阅读
0 投票
1 回复 46 阅读
用户头像 提问 2015年 9月18日 @ Ahri 中士 (1,072 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...