并行请求由一个Spring单例bean并行/顺序处理

时间:2016-11-13 08:36:31

标签: spring singleton stateless

我已提到这些链接,但仍有疑问 concurrent request to singleton bean
another less relevant link

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

希望不是,但是它是如何运作的。
从第一个链接,我得到了一些理解 - 一个单独的bean对象,这个singeton bean的字节代码的一个实例 - 由独立的线程栈访问 - 但不能核心

2 个答案:

答案 0 :(得分:0)

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

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

在某些特殊情况下可以按顺序处理它,例如当你使用某些锁,同步方法和其他阻塞语句时。

答案 1 :(得分:0)

  

并行请求是否由一个并行/顺序处理   春季单例豆例如@Controller,@ Service?

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

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

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

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