Thread-local storage (TLS) in multithreading
Each thread has its own instance of a map that stores thread-local variables.
This map holds the associations between the thread-local variables and their corresponding values, ensuring that the variables are unique to the thread and are not shared across other threads.
This allows threads to maintain
- isolated states,
- preventing race conditions and
- ensuring data consistency within each thread.
public static ThreadLocal<Student> studentThreadLocal = new ThreadLocal<Student>();
studentThreadLocal
has the global scope, but the value inside the
studentThreadLocal has the scope only for the duration of a thread
//Sets the current thread's value
studentThreadLocal.set(new Student("Harry Potter"));
//gets the current thread's value'
studentThreadLocal.get();
Inheritable ThreadLocal
InheritableThreadLocal
is a subclass of ThreadLocal
. It allows child threads
to inherit the values of the parent thread.
- By Default child thread values are identical to Parent Thread.
When a child thread gets created the the local values of parent get copied over to the child in 2 ways
- Default copy is shallow copy (pointer to the original is saved with the child)
- If the child thread sets a new value, parent thread will see the updated value
// InheritableThreadLocal variable
private static final InheritableThreadLocal<String> threadLocalValue = new InheritableThreadLocal<>();