,还让人看电视吗# Joke - 肚皮舞运动
D*0
1 楼
【 以下文字转载自 Java 讨论区 】
发信人: DK100 (dark knight), 信区: Java
标 题: java多线程问题请教
发信站: BBS 未名空间站 (Tue Jan 5 12:34:03 2016, 美东)
操作比较简单,就是有个cache,当cache miss时从数据库取值,同时更新cache。这里
的key是由两部分组成的,一个int和一个interface,函数输入是这两个。问题是在多
线程下如何synchronize。 我想是用concurrentHashMap当cache
Type是一个interface
一开始想用下面这个Key来做map的key,但是后来觉得不对,这也是想请教的一个地方
class Key {
public int a;
public Type t;
public Key(int a, Type t){...}
public int hashCode() {...}
public boolean equals(Key k) {... }
}
List f(int a, Type t) {
//这里如何synchronize
//我想用a和t组成一个string,然后用string来当key,然后synchronize在这个
string上
StringBuilder sb = new StringBuilder();
sb.append(a);
sb.append(t);
String key = sb.toString().intern();
synchronize(key) {
if(map.containsKey(key)){
return map.get(..);
}
// fetch corresponding value from database or some data source
map.put(key, value);
ret = value;
}
return ret;
}
不知道这么做对不对,合不合理,请多指教,谢谢。
发信人: DK100 (dark knight), 信区: Java
标 题: java多线程问题请教
发信站: BBS 未名空间站 (Tue Jan 5 12:34:03 2016, 美东)
操作比较简单,就是有个cache,当cache miss时从数据库取值,同时更新cache。这里
的key是由两部分组成的,一个int和一个interface,函数输入是这两个。问题是在多
线程下如何synchronize。 我想是用concurrentHashMap当cache
Type是一个interface
一开始想用下面这个Key来做map的key,但是后来觉得不对,这也是想请教的一个地方
class Key {
public int a;
public Type t;
public Key(int a, Type t){...}
public int hashCode() {...}
public boolean equals(Key k) {... }
}
List
//这里如何synchronize
//我想用a和t组成一个string,然后用string来当key,然后synchronize在这个
string上
StringBuilder sb = new StringBuilder();
sb.append(a);
sb.append(t);
String key = sb.toString().intern();
synchronize(key) {
if(map.containsKey(key)){
return map.get(..);
}
// fetch corresponding value from database or some data source
map.put(key, value);
ret = value;
}
return ret;
}
不知道这么做对不对,合不合理,请多指教,谢谢。