在一次工作 session 上。我听说Thread Local绝对是一种反模式,因为新的应用程序服务器使用称为新IO的新线程技术。事实上,他们告诉我ThreadLocal的问题是一个完整的线程必须等待数据库查询返回响应,这绝对是浪费资源(内存和CPU)。 新开发的线程策略使用线程池,因此当不再需要线程时,它将返回到池中。我听说这项新技术是在新的AS中实现的,例如我们的Jboss,Websphere......(我是没有把握)。 例如,我可以在本地使用 Apache tomcat 吗?(如果有关于这一事实的可能文档)
最佳答案
ThreadLocal
是故事中的配角。您听说过的是异步请求处理,NIO 库对此提供了帮助。
在这种编程范例中,您不会得到像这样的简单方法
Response processRequest(Request req)
相反,你会得到
void requestReceived(Request req, Response resp)
在这个方法中,您通常会通过准备后端请求并调用其方法来开始处理,如下所示
execute(Query q, ResultCallback cb)
框架将调用您的ResultCallback
的方法resultReady(Result res)
,其中将包含查询结果。
这里的要点是,方法requestReceived
会立即返回,并且在后端处理后端请求时不会占用线程子系统。
顺便说一句,这种编程风格的另一个名称是连续传递风格或 CPS。这是因为当你调用一个函数时,你不会等待它的返回值,而是向其中传递一个回调函数,该回调函数将使用函数的结果进行调用,并且它实现了总的延续请求处理。
ThreadLocal 如何融入其中
如果您遵循了我上面所说的,您应该已经清楚,在这种请求处理方式中,ThreadLocal 是一个无用的概念,因为请求处理可以自由地从线程跳转到线程。线程,并且以一种完全超出您控制范围的方式。
关于java - ThreadLocal 反模式的替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17832253/