【问题标题】:Parallel requests be processed parallel/sequential by one Spring singleton bean并行请求由一个 Spring 单例 bean 并行/顺序处理
【发布时间】:2017-03-27 02:26:27
【问题描述】:

我已经参考了这些链接,但仍有疑问
concurrent request to singleton bean
another less relevant link

我的问题/疑问:并行请求是否会由一个 Spring 单例 bean 并行/顺序处理[因为这只是一个对象/实例],例如@Controller、@Service 甚至在多核处理器上(并行线程执行能力)

希望不是,但它是如何工作的。
从第一个链接中,我得到了一些理解——一个单例 bean 对象,这个单例 bean 的一个字节码实例——由线程堆栈独立访问——但无法关联

【问题讨论】:

    标签: spring singleton stateless


    【解决方案1】:

    并行请求会被并行/顺序处理一个吗 Spring 单例 bean,例如例如@Controller, @Service ?

    @Controller@Service 的请求将由 J2EE 容器创建的不同线程并行处理。 J2EE 容器可以创建的线程数限制为内存可用性。

    单个对象可以处理任意数量的请求(受上述可用内存的限制)。

    为了更好地理解这个概念,你可以使用 Spring MVC 的DispatcherServlet(或任何具有默认行为的Servlet),它将是一个由 Servlet Container 创建的单例对象,同时每个 Servlet 可以并发处理多个请求(来自用户/客户端)。

    因此,如果您想控制单个 bean 对象(Service/Controller/DAO,无论哪个对象)处理的请求数,那么需要限制请求或简单地添加同步到bean的方法(或关键部分)。但是,一般来说,不建议这样做,除非您遇到一些问题或处理原子性(将多个事务作为单个工作单元处理)。

    【讨论】:

      【解决方案2】:

      通常情况下,您的 Spring 单例类由不同的线程并行处理。

      Spring bean 是存储在 spring 上下文中的简单 java 对象(可能被包装)。以及如何并行处理该对象的每个简单 java 对象。

      在一些特殊情况下可能会被顺序处理,例如当你使用一些锁、同步方法和其他阻塞语句时。

      【讨论】:

        猜你喜欢
        • 2019-06-24
        • 1970-01-01
        • 2023-03-31
        • 2011-04-21
        • 1970-01-01
        • 2023-01-30
        • 2018-03-02
        • 1970-01-01
        • 2021-11-08
        相关资源
        最近更新 更多