Java HashMap race-condition

Ich versuche herauszufinden, wenn es irgendeine race-condition in diesem Stück code. Wenn der Schlüssel nicht " Thread.currentThread', dann würde ich denken, ja. Aber da der thread selbst ist der Schlüssel, wie ist es möglich, eine race-condition? Kein anderer thread kann möglicherweise aktualisieren Sie den gleichen Schlüssel in der HashMap!

public class SessionTracker {

     static private final Map<Thread,Session>  threadSessionMap = new HashMap<Thread,Session>();

     static public Session get() {
         return threadSessionMap.get(Thread.currentThread());
     }

     static public void set(Session s) {
         threadSessionMap.put(Thread.currentThread(),s);
     }

     static public void reset() {
         threadSessionMap.remove(Thread.currentThread());
     }
}
Beachten Sie, dass es gibt andere Probleme, als die concurrency-Probleme beschrieben, auf die Antworten. Sie können Sichtbarkeit Probleme. (den internen Zustand der Karte, wie gesehen, durch die ein thread werden könnte, unterscheidet sich von den internen Zustand der Karte, wie gesehen, durch einen anderen thread). Wenn Sie anrufen set auf einen thread, und dann, später, ein anderer thread ruft size() ist, kann es erhalten 0 als Ergebnis.
Trotzdem, die Funktionalität, die Sie suchen, ist genau das, was ThreadLocal: download.oracle.com/javase/7/docs/api/index.html?java/lang/...

InformationsquelleAutor JavaLearner | 2011-10-20

Schreibe einen Kommentar