当前位置: 首页 > 知识库问答 >
问题:

Spring bean句柄如何处理并发

丁宏浚
2023-03-14

我的web应用程序使用SpringIOC。因此,默认情况下,我所有的SpringBean都是单例的。如果两个请求试图同时访问单个类的两个不同方法(例如,MySpringBean是一个具有两个方法的类searchRecordinsertRecord),那么两个请求将同时访问同一个springbean。

同一个Spring bean如何同时对两个客户端可用,或者当两个请求都试图通过同一个Spring bean访问两个不同的方法时,这将是并发问题。由于Spring bean是单例,因此不能形成新实例。在这种情况下,这将如何工作?

共有3个答案

仉磊
2023-03-14

正如其他人已经建议的那样,Spring将在“singleton”bean的情况下为所有线程提供相同的实例。

您需要了解的是,线程通过执行代码来完成系统中的所有工作,而对象提供状态和行为(代码)。因此,多个线程(在您的例子中是请求)确实有可能在一个单例bean中同时运行相同的方法。您可以按照Tomasz的建议使这些bean成为无状态的,或者使它们成为“线程安全的”。

闻人栋
2023-03-14

如果bean是单例,那么Spring将在任何线程中为您提供相同的实例。由你来决定让豆子线程安全。因为它是单例,所以最好使该类无状态。

金阳曜
2023-03-14

您必须首先了解并发何时会导致问题。如果Springbean是无状态的(它没有任何字段,所有字段都是final,或者所有字段只分配一次),那么多个线程可以安全地使用同一个bean,甚至相同的方法。

  • 使用Spring的线程安全、无状态设计
  • Spring mvc声明所有bean为单例
 类似资料:
  • 我已经为TextInput创建了公共类,并多次使用它,但它的事件处理方法相同。我想在TextInput中填充数据后处理数组数据。 这里添加了多个textField和单个。如何标识哪个textInput调用了。 根据数组数据动态添加的textField组件。现在,当用户编辑textInput时,我希望在特定索引上标识textInput和更新的数组文本。

  • 在书写代码与阅读代码的时候,经常会看到这一句代码: typedef void *HANDLE ,它是何方神圣呢?如何理解呢? 不理解它的时候,感觉它很神奇,知道它以后,它就是个typedef的定义,只不过是void*类型罢了,也就是HANDLE等价于void *,我们可以叫它披着句柄皮的指针(PS:指针和句柄是有区别的,在这说句废话); 对于void* 神通广大,因为它作为函数参数or函数返回值,

  • 当你用作图命令时,MATLAB用多种图形对象创建图形,例如线,文本,表面(完整列表见Graphics Objects)。所有图形对象都有控制其性能的属性。你可以在MATLAB中询问每种属性的取值并设置大部分的属性值。 每当MATLAB创建一个图形对象时,它就给该对象赋以一个标识符(称为句柄)。可以用此句柄访问对象属性。若你想作下列操作,句柄图形很有用。 修改图形外观。 通过编写能直接创建和操作对象

  • 问题内容: 我知道MySQL中并发SELECT和INSERT存在一个问题。但是,我的问题是,如果我与MySQL建立两个连接并继续使用这两个连接来加载数据,MySQL是同时获取数据还是在加载另一个之前等待一个完成? 我想知道两种情况下MySQL的行为。就像当我尝试在打开单独的连接时尝试同时在同一张表或不同表中加载数据时一样。 问题答案: 如果要创建与数据库的新连接并从两个链接执行插入,那么从数据库的

  • 本文向大家介绍JavaScript多并发问题如何处理,包括了JavaScript多并发问题如何处理的使用技巧和注意事项,需要的朋友参考一下 经常在写代码的时候碰到这样的场景:页面初始化时显示loading页,同时启动多个ajax并发请求获取数据,当每个ajax请求返回时结束loading。 举个例子,一个下订单的页面,要查询常用地址信息、商品信息、地市信息…而这些请求都是异步的,希望等到所有数据加

  • 问题内容: 我正在尝试自己学习编程,但仍在尝试掌握它。我收到以下错误: java.io.IOException:句柄无效 这是我的代码 我相信,每当我调用该方法时,都会出现错误,当我尝试显示默认构造函数中的字节数时,它可以很好地工作并显示。 问题答案: 好了,在实际开始使用它之前,请先关闭构造函数的块。将结束部分从构造函数中移到完成后将被调用的位置,例如在main 下方调用或单独的close方法。