문제

문제는 해시 가능 요청 옵션과 결합 된 전역 옵션 해시 가능 해시 가능 전역 옵션이있는 이전 웹 서비스 라이브러리가 있다는 것입니다. 요청 코드에 영향을 줄 수는 없지만 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);
    }

}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top