我有一个适用于所有用户的 bean,它将 ids-> 名称存储在&地图@ApplicationScoped
中,反之亦然。Trove
java.util
我只是在构建 bean或(如果网站管理员手动刷新的情况下)构建地图一次。
在 bean 方法中,我只是将get()
与地图一起使用,因此不修改地图。这将是线程安全的,因为它仅用于准备好的目的吗?我不会与外部的任何其他 bean 共享地图,也不会在我的代码中随时修改地图(添加/删除条目)。
另外,在这种情况下是否需要使字段成为最终字段?
豆代码如下:
@ApplicationScoped
@ManagedBean(name="directory", eager=true)
public class directory {
private static TIntObjectHashMap<String> idsToNamesMap;
private static TreeMap<String, Integer> namesToIdsMap;
@PostConstruct
public void buildDirectory(){
// building directory here ....
}
public String getName(int topicId){
return idsToNamesMap.get(topicId);
}
public List<Entry<String, Integer>> searchTopicsByName(String query){
return new ArrayList(namesToIdsMap.subMap(query, true, query+"z", true).entrySet());
}
}