【发布时间】:2012-06-20 19:22:09
【问题描述】:
我正在尝试在注入控制器的单例 spring 服务中实现 ConcurentHashMap 的线程安全使用:
@Service
public MyService{
final ConcurrentMap<String, AtomicInteger> myMap = new ConcurrentHashMap<String, AtomicInteger>(10) {
{/* initialize the ten key/values */
}
};
public int add(String key) {
return myMap.get(key).incrementAndGet();
}
// accessed via ajax loop (and controller), if value changes update display
public int getCount(String key) {
return myMap.get(key).get();
}
}
有没有更好的方法可以让访问 hashmap 线程安全?我怎样才能使它适应在集群环境中工作?这是对my other question.的跟进
【问题讨论】:
-
你看过Guava的
ConcurrentHashMultiset,基本上就是这个东西吗?如果你不想要额外的导入,你至少可以看看源代码...... -
只是为了确认我的理解.....“集群”是指多台服务器吗?
-
@J-16SDiZ 是的,我正在考虑在 tomcat/spring web 环境中,我对在 spring 服务类中获得线程安全的最佳方法更感兴趣
-
如果你想跨多个服务器工作,你需要像
memcached这样的服务。它有原子incr/decr命令。 -
以上代码是线程安全且正确的。让它在集群环境中工作确实需要一个集中式服务器、缓存或数据库。
标签: java multithreading spring concurrency