我有一些服务可以执行一些逻辑操作,例如记录,写入db并调用某些外部服务。它将数据保存在像Map<Key, Data>
这样的地图中,其中Key - 它是一个整数。当服务获取具有密钥的数据时,将该数据放入映射,执行某些逻辑并在此之后返回更新的数据。该服务应该是并发和线程安全的。
我有几种变体可以做到。首先,它使所有方法同步(这或映射)(但在这种情况下,我认为这是一个坏主意,因为内部逻辑需要一些时间,所有其他调用者将等待)。第二个变种是它在密钥上进行同步。在这种情况下,我只锁定一小段,而不是所有地图。
我对这两个变种是对的吗?或许还有其他变种?