Domanda

As far as I understand ThreadLocal variables maintain a separate copy of the variable for each thread. This variable whose multiple copies are maintained is essentially a shared variable. So what does it mean to say that a variable value can have multiple copies? How is consistency maintained so that the values of the copies do not get out of sync?

È stato utile?

Soluzione

Your statement This variable whose multiple copies are maintained is essentially a shared variable is exactly wrong.

The ThreadLocal is set up so that it is never a shared variable. There is no need to sync it at all. Find the source for thread local and you will see.... from GrepCode we can see that it has a separate instance per thread:

public T get() {
    Thread t = Thread.currentThread();
    ThreadLocalMap map = getMap(t);
    if (map != null) {
        ThreadLocalMap.Entry e = map.getEntry(this);
        if (e != null)
            return (T)e.value;
    }
    return setInitialValue();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top