com.google.gwt.emul.java.lang.InheritableThreadLocal Maven / Gradle / Ivy
Show all versions of xapi-dev Show documentation
package java.lang;
/**
* TODO:
* properly support threadlocals beyond a singleton for single-threaded gwt.
*
* Either using "virtual threads" to represent an operation's environment,
* or other iframe windows / web workers existing as actual separate threads;
* provided all inter-thread communication is handled with serializable objects,
* and async interfaces for accessing functionality, it should be possible
* to build a single unified multi threading api that will work on the client
* and on the server.
*
* Original documentation for InheritableThreadLocal:
*
*
* This class extends ThreadLocal to provide inheritance of values
* from parent thread to child thread: when a child thread is created, the
* child receives initial values for all inheritable thread-local variables
* for which the parent has values. Normally the child's values will be
* identical to the parent's; however, the child's value can be made an
* arbitrary function of the parent's by overriding the childValue
* method in this class.
*
* Inheritable thread-local variables are used in preference to
* ordinary thread-local variables when the per-thread-attribute being
* maintained in the variable (e.g., User ID, Transaction ID) must be
* automatically transmitted to any child threads that are created.
*
* @author Josh Bloch and Doug Lea
* @version %I%, %G%
* @see ThreadLocal
* @since 1.2
*/
public class InheritableThreadLocal extends ThreadLocal {
/**
* Computes the child's initial value for this inheritable thread-local
* variable as a function of the parent's value at the time the child
* thread is created. This method is called from within the parent
* thread before the child is started.
*
* This method merely returns its input argument, and should be overridden
* if a different behavior is desired.
*
* @param parentValue the parent thread's value
* @return the child thread's initial value
*/
protected T childValue(T parentValue) {
return parentValue;
}
// /**
// * Get the map associated with a ThreadLocal.
// *
// * @param t the current thread
// */
// ThreadLocalMap getMap(Thread t) {
// return t.inheritableThreadLocals;
// }
/**
* Create the map associated with a ThreadLocal.
*
* @param t the current thread
* @param firstValue value for the initial entry of the table.
* @param map the map to store.
*/
void createMap(Thread t, T firstValue) {
// t.inheritableThreadLocals = new ThreadLocalMap(this, firstValue);
}
}