gpt4 book ai didi

java - Spring 的线程

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:46:38 24 4
gpt4 key购买 nike

我有一个使用 spring、hibernate 和 struts 的 Web 应用程序(它在 Tomcat 上运行)

调用顺序是这样的……

Struts Action 调用 spring 服务 bean,后者又调用 Spring DAO bean。 DAO 实现是一个 Hibernate 实现。

问题是我所有的 spring bean 都会在同一个线程中运行吗?我可以在 ThreadLocal 中存储一些东西并在另一个 bean 中获取它吗?

我很确定这在无状态 session Bean 中行不通。EJB 容器可以(或将会)为每次调用 session bean 生成一个新线程

spring 容器会做同样的事情吗?即在同一线程中运行所有 bean?

当我尝试 JUnit 测试时 - 我通过测试用例中的 Thread.currentThread().getId() 和两个 bean 获得了相同的 ID - 这让我相信只有一个线程在运行

或者行为是不可预测的?或者在 Tomcat 服务器上运行时它会改变吗?

澄清我不想在两个线程之间交换数据。我想将数据放入 ThreadLocal 并能够从调用堆栈中的所有 bean 中检索它。这仅在所有 bean 都在同一个线程中时才有效

最佳答案

Spring 不会生成线程。汤姆猫可以。 Spring 只是为您创建和连接对象。

来自浏览器的每个请求都在一个请求中处理。处理请求的是 Tomcat。 Tomcat 创建线程来处理请求。

假设您刚刚在 Spring 中创建了一个名为“X”的单例 bean。然后所有请求都使用相同的 X 实例。

Spring bean 不存在于线程中。它们只是分配在堆上。

关于java - Spring 的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/782470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com