我有一个Singleton类,用于处理Hashmap中具有不同对象的一种缓存。
(键的格式直接链接到存储在 map 中的对象的类型-因此该 map 属于)

map 上可能有三种不同的 Action :添加,获取,删除。

我使用公共(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很安全,我想这个原理可以应用于任何其他类型的共享资源。

预先非常感谢您的回答。

大卫

最佳答案

我将需要查看您对方法的实现,但这足够了。
但是我建议您使用Java的Collection API中的Map,然后除非您共享其他实例,否则无需同步方法。

阅读此:http://www.java-examples.com/get-synchronized-map-java-hashmap-example

关于java - Java同步方法入口点线程是否足够安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11472276/

10-10 14:00
查看更多