栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ThreadLocal是否可以与Tomcat NIO Connector一起安全使用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ThreadLocal是否可以与Tomcat NIO Connector一起安全使用

只有熟悉Tomcat代码的人才能为您提供具体的答案,但是我会尝试一个木制的:)

首先,您需要清楚是只使用NIO连接器还是在谈论异步servlet。在每种情况下,答案都会略有不同。

需要注意的主要事情是Java没有任何类型的延续,协同例程或线程重新安排。这意味着一旦启动在线程上运行的一段代码, 只有 那段
代码将在线程上运行,直到完成为止。

因此,如果您有:

myObject.doSomething();
那么
doSomething
就目前而言,它对该线程具有独占访问权。线程不会切换到其他代码-
不管您使用哪种类型的IO模型。

可能(将会)发生的事情是,不同的线程将被调度为在不同的CPU上运行,但是每个线程将运行一段代码来完成。

所以如果

doSomething
是:

public static final ThreadLocal<MyClass> VALUE = new ThreadLocal<MyClass>();public void doSomething() {  VALUE.set(this);  try {    doSomethingElse();  } finally {    VALUE.set(null);  }}

那么就没有什么可担心的了-

doSomethingElse
将只运行一个线程,并且将在整个执行过程中将threadlocal设置为正确的值。

因此,简单的NIO连接器应该没有任何区别-
容器将

service
在servlet上调用方法,该servlet将在单个线程中执行,然后最后完成。只是容器在处理连接时能够以更有效的方式处理IO。

如果您使用的是异步servlet,则有所不同-
在这种情况下,您的servlet可能会针对单个请求多次调用(由于异步模型的工作方式),并且这些调用可能在不同的线程上,因此您可以在您的Servlet调用之间,不会在线程本地存储任何内容。但是对于您的服务方法的一次调用,它仍然可以。

HTH。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/466896.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号