2

下面我已经实现了该Multiton模式,但我认为这个问题同样适用于该Singleton模式:

private static ConcurrentHashMap<String, LocatorDAO> instances = new   ConcurrentHashMap<String, LocatorDAO>();

public static LocatorDAO getInstance(String page String field) 
{
    String instanceID = page + " " + field; 
    LocatorDAO result = instances.get(instanceID);

    if (result == null) 
    {

        LocatorDAO m = new LocatorDAO(page, field);
        result = instances.putIfAbsent(instanceID, m);

        if (result == null)
            result = m;
    }

    return result;
}

我想通过每 300 秒实例化一个新实例来修改这个设计 - 所以如果从我们实例化前一个实例的时间过去了 300 秒,我想再次实例化它(或者如果该实例从未实例化)。

怎么可能做到这一点?

4

1 回答 1

0

解决方案: 每当创建实例时保存时间戳。每当创建新实例时,检查保存的时间戳并找出时间差。

如何实现: 至少有两种方法可以实现:

  1. 手动添加创建时间戳instanceID并搜索所有键。这是一个简单的解决方案,但速度会慢一些,因为您必须搜索哈希图中的所有键。

  2. 实现一个 bean 类,它将有两个字段LocatorDAO和一个长字段以节省创建时间。在创建过程中,如果哈希映射中有一个项目,检查它的创建时间,如果它超过 300 秒,则创建一个新实例

希望这个答案(没有代码示例)足够好。

于 2017-05-02T11:05:11.023 回答