为简洁起见,下面是实际问题的简化。如果有什么不清楚,请告诉我。如何动态更新静态查找列表
我有以下(伪)代码在某些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与新的LookupSet交换。因此,它不会妨碍isItemPresent()
的操作。 为了实现这一点,我是否需要旋转另一个线程,该线程将保持更新lookupSetLatest
,并且priodically该应用程序的lookupSet将被更新/交换。
我并不担心LookupSet延迟了几秒,isItemPresent()会返回错误的结果。我非常关键的是ItemPresent()不会中断。
让我知道是否需要更多细节。