키 콜백 읽기 스레드-로컬 변수가있는 정적 해시 가능
문제
문제는 해시 가능 요청 옵션과 결합 된 전역 옵션 해시 가능 해시 가능 전역 옵션이있는 이전 웹 서비스 라이브러리가 있다는 것입니다. 요청 코드에 영향을 줄 수는 없지만 Global Hashtable을 설정할 수 있습니다. 그리고 원래 값 대신 스레드-로컬 변수를 읽을 수있는 키 중 일부에 대한 콜백을 수행 할 수있는 하시 테이블 클래스에 대한 확장을 구현하는 간단한 방법이 있는지 궁금했습니다.
편집하다: 나는 JDK 1.4.2에 묶인 것을 언급하는 것을 잊었다.
해결책
파생 된 새 클래스를 만들 수 있습니다 Hashtable
그리고 get()
방법.
Twolfe18의 코드 구축 :
public class MyHashMap<K, V> extends HashMap<K, V> {
TheadLocal special = new TheadLocal ();
public MyHashMap<K, V>() {
super();
}
public V get(K key) {
if ("special".equals (key))
return special.get ();
return super.get(key);
}
}
값을 설정하려면 사용하십시오 map.special.set(value)
. 값은 스레드마다 다릅니다.
다른 팁
서식은 Aaron의 응답에 대한 의견에서 끔찍한 결과를 얻었으므로 다음과 같습니다.
public class MyHashMap<K, V> extends HashMap<K, V> {
public MyHashMap<K, V>() {
super();
}
public V get(K key) {
// check the key or whatever you need to do
V value = super.get(key);
// check the value or whatever you need to do
return value;
}
}
내가 결국 사용한 코드는 다음과 같습니다.
package util;
import java.util.Hashtable;
public class SingleThreadLocalHashtable extends Hashtable {
/** Class version. */
private static final long serialVersionUID = 1L;
private ThreadLocal holder = new ThreadLocal();
private String specialKey;
public SingleThreadLocalHashtable(String specialKey) {
super();
this.holder.set(null);
this.specialKey = specialKey;
}
public synchronized Object get(Object key) {
if ((specialKey != null) && specialKey.equals(key)) {
return holder.get();
}
return super.get(key);
}
public synchronized Object put(Object key, Object value) {
if ((specialKey != null) && specialKey.equals(key)) {
holder.set(value);
}
return super.put(key, value);
}
}
제휴하지 않습니다 StackOverflow