使用Spring java,你能够安全地保存实例字段吗?

时间:2014-10-14 10:21:44

标签: java spring spring-mvc thread-safety

是否可以将请求一起批处理,以便安全地完成。

例如:

尝试保存所有买/卖订单,在10分钟内将每个用户订单分组。这意味着您需要存储在每个用户使用的内存中。

因此,您在服务中保存了订单构建器的哈希映射。我认为由于地图,这不会是线程安全的。

一个简单的例子(不工作的java代码),只是一个粗略的例子

@Service
public class OrderService
{
    Map<User,OrderRequestBuilder> builders = new HashMap<User,OrderRequestBuilder>()
    Map<User,Timer> timers =  new HashMap<User,Timer>(();
    public void addOrder( User user , BuyOrder order)
         if (!builders.containsKey(user)){
              builders.put(user, new OrderRequestBuilder().withUser(user);
         }
         OrderRequestBuilder builder = builders.get( user );
         builder.withAddOrder( order);
         builders.put(builder);
         if (!timers.containsKey(user){
             Timer t = new Timer();
             t.schedule( new TimerTask(){
                   public void run(){
                      sendOrder(user)
                   }},600000
         }
    }

    // Runs at a fixed time for a specific account, scheduled
    public void sendOrder(User user){
         timers.remove(user);
         sendService.send( builders.remove(user).build() );
         builders.put(user, new OrderRequestBuilder().withUser(user);

    }

    public void sellOrder( User user , SellOrder order)
         if (!builders.containsKey(user)){
              builders.put(user, new OrderRequestBuilder().withUser(user);
         }
         OrderRequestBuilder builder = builders.get( user );
         builder.withSellOrder( order);
         builders.put(builder);
         if (!timers.containsKey(user){
             Timer t = new Timer();
             t.schedule( new TimerTask(){
                   public void run(){
                      sendOrder(user)
                   }},600000
         }
    }

}

0 个答案:

没有答案