我有一个 Singleton 类处理一种在 Hashmap 中具有不同对象的缓存。 (键的格式直接链接到映射中存储的对象类型 - 因此映射是 )
可以在 map 上执行三种不同的操作:添加、获取、删除。
我使用公共(public)入口点方法(无密集访问)保护对 map 的访问:
public synchronized Object doAction(String actionType, String key, Object data){
Object myObj = null;
if (actionType.equalsIgnorecase("ADD"){
addDataToMyMap(key,data);
} else if (actionType.equalsIgnorecase("GET"){
myObj = getDataFromMyMap(key);
} else if (actionType.equalsIgnorecase("REM"){
removeDataFromMyMap(key);
}
return myObj;
}
注意事项:
map 是私有(private)的。方法 addDataToMyMap()、getDataFromMyMap() 和 removeDataFromMyMap() 是私有(private)的。只有入口点方法是公共(public)的,除了类本身的静态 getInstance() 之外别无其他。
您是否确认并发访问 map 是线程安全的,因为除了通过该方法没有其他方法可以使用 map ?
如果它对于 map 来说是安全的,我想这个原则可以应用于任何其他类型的共享资源。
非常感谢您的回答。
大卫
最佳答案
我需要查看您对方法的实现,但这已经足够了。 但是我建议您使用 Java 的 Collection API 中的 Map,这样您就不需要同步您的方法,除非您共享其他一些实例。
阅读:http://www.java-examples.com/get-synchronized-map-java-hashmap-example
关于java - Java 同步方法入口点线程是否足够安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11472276/