【发布时间】:2013-11-27 10:12:54
【问题描述】:
为简洁起见,以下是对实际问题的简化。如果有什么不清楚的地方请告诉我。
我有以下(伪)代码在一些 java 服务中运行。用户通过服务调用调用“isItemPresent()”(调用频率可能为每秒数千)。
public static Set<String> lookupSet= new HashSet<String>
void init()
{
//read some million line text file or db and load lookupList
lookupSet.add("item 2");
lookupSet.add("item 5");
lookupSet.add("item 9");
}
boolean isItemPresent(String checkItem)
{
if(lookupSet.contain(checkItem))
return true;
return false;
}
init() 很耗时,需要几秒钟才能完成。该方法仅在应用首次启动时调用一次。
问题:
lookupSet 中的 1 或 2 项每天可以添加或删除几次:有时一天一次,有时一天 50 次。
我想要一种无需重新初始化整个应用程序即可动态更新lookupSet 的方法。更新的方式应该是isItemPresent() 不会为lookUpSet 产生空指针异常。
我想知道是否可以使用更新的项目列表创建一个新的 LookupSet 并将旧的 LookupSet 替换为新的。因此,它不会妨碍isItemPresent() 的操作。
为了实现这一点,我是否需要旋转另一个线程来维护更新的lookupSetLatest,并且通常应用程序的lookupSet 将被更新/交换。
我不担心 LookupSet 更新晚了几纳秒并且 isItemPresent() 会返回错误的结果。我很关键 isItemPresent() 不会中断。
如果需要更多细节,请告诉我。
【问题讨论】:
标签: java algorithm design-patterns architecture