Java – is ThreadLocal thread safe?

For example, we have a static ThreadLocal field and a setter:

private static final ThreadLocal threadLocalField = new ThreadLocal;

public static void getSXTransaction() {
  threadLocalField.set(new MyValue());
}

I want to know, because Java There is no implicit synchronization in lang. ThreadLocal #set method, so what is the guarantee of thread safety? I know that the treadlocal class is completely thread safe in nature, but I can't understand how it is implemented

This is its source code:

/**
 * Sets the current thread's copy of this thread-local variable
 * to the specified value.  Most subclasses will have no need to 
 * override this method,relying solely on the {@link #initialValue}
 * method to set the values of thread-locals.
 *
 * @param value the value to be stored in the current thread's copy of
 *        this thread-local.
 */
public void set(T value) {
    Thread t = Thread.currentThread();
    ThreadLocalMap map = getMap(t);
    if (map != null)
        map.set(this,value);
    else
        createMap(t,value);
}

Solution

This is safe because getmap returns the mapping for a given (i.e. current) thread No other thread can mess this up So it really depends on the implementation of getmap to ensure that any thread can - and as far as I know, it is only delegated to a field in the thread object I don't know if getmap has ever passed any threads other than the current thread - if so, it may be a bit tricky - but I suspect they have been carefully written to ensure that they are not a problem:)

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>