当前位置: 首页 > 面试题库 >

Spring单例螺纹安全性

欧阳嘉
2023-03-14
问题内容

如果我有一个下面定义的Java类,则通过依赖项注入将其插入我的Web应用程序中:

public AccountDao
{
   private NamedParameterJdbcTemplate njt;
   private List<Account> accounts;

   public AccountDao(Datasource ds)
   {
       this.njt = new NamedParameterJdbcTemplate(ds);
       refreshAccounts();
   }

   /*called at creation, and then via API calls to inform service new users have 
     been added to the database by a separate program*/
   public void refreshAccounts()
   {
      this.accounts = /*call to database to get list of accounts*/
   }

   //called by every request to web service
   public boolean isActiveAccount(String accountId)
   {
       Account a = map.get(accountId);
       return a == null ? false : a.isActive();
   }
}

我担心线程安全。Spring框架是否不能处理一个请求正在从列表中读取而当前正在被另一个请求更新的情况?我以前在其他应用程序中使用过读/写锁,但是我之前从未考虑过这种情况。

我打算将bean作为单例使用,以便减少数据库负载。

顺便说一下,这是以下问题的跟进:

Java内存存储以减少数据库负载-安全吗?

编辑:

所以这样的代码可以解决这个问题:

/*called at creation, and then via API calls to inform service new users have 
         been added to the database by a separate program*/
       public void refreshAccounts()
       {
          //java.util.concurrent.locks.Lock
          final Lock w = lock.writeLock();
          w.lock();
          try{
               this.accounts = /*call to database to get list of accounts*/
          }
          finally{
             w.unlock();
          }
       }

       //called by every request to web service
       public boolean isActiveAccount(String accountId)
       {
           final Lock r = lock.readLock();
           r.lock();

           try{
               Account a = map.get(accountId);
           }
           finally{
               r.unlock();
           }
           return a == null ? false : a.isActive();
       }

问题答案:

对于单例bean的多线程行为,Spring框架不做任何事情。处理单例bean的并发问题和线程安全是开发人员的责任。

我建议阅读以下文章:Spring
Singleton,请求,会话Bean和线程安全



 类似资料:
  • 我想知道Spring单例豆是否是线程安全的,如果是,那么为什么,如果不是,那么为什么? 因为我是初学者,所以帮助将不胜感激。

  • 概述 螺纹轴 4*39mm通常作为轴配合齿轮、同步带轮、联轴器或一些轴承使用。它由不锈钢材料制成, 一端螺纹轴, 一端光轴。 参数 直径:4mm 长度:39mm 材质:镀铬高碳钢 尺寸图纸 搭建案例

  • 概述 螺纹轴 4*22mm通常作为轴配合齿轮、同步带轮、联轴器或一些轴承使用。它由不锈钢材料制成, 一端螺纹轴, 一端光轴。

  • 我在多线程环境中做的工作很少。所以,我需要知道below类的getInstance函数是否是线程安全的。这是单例类: 在getInstance函数(未注释)中,返回静态对象的引用。它需要线程安全机制吗? 在第二个getInstance(注释)中,如果singleObject为null,我们就创建对象。所以,它需要锁定机制,需要同步,对吧?

  • 问题内容: 我是spring-security(Java)的新手,我正在寻找以下示例的简单示例: 如何使用Spring Security进行登录和注销 确保会话存在于每个页面上,如果没有,则再次重定向到登录名 如何获得对当前用户会话的访问权限 我的项目目前正在使用Spring MVC,并处于hibernate状态。 我已经构建了loginAPI + loginDAO,现在我需要结合安全性并确保某些

  • 问题内容: 我写了下面的Singleton类。我不确定这是否是线程安全的单例类吗? 谁能帮我这个?我在上述Singleton课堂上的任何想法都会有很大帮助。 更新代码: 我正在尝试将波希米亚建议纳入我的代码中。这是更新的代码,我得到了- 谁能看一下,让我知道这次是否正确? 问题答案: 但是有一个简单的技巧,可以让你的代码是线程安全的实现,并不需要同步!它称为“ 按需初始化持有人”习惯用法,它看起来