2013-11-27 44 views
0

为简洁起见,下面是实际问题的简化。如果有什么不清楚,请告诉我。如何动态更新静态查找列表

我有以下(伪)代码在某些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()不会中断。

让我知道是否需要更多细节。

回答