How does ThreadLocal behave in multithreaded code?

ThreadLocal is a Java class that provides thread-local variables. Each thread accessing such a variable has its own, independently initialized copy of the variable. This makes it easy to maintain instance-specific data for each thread without using synchronized blocks.

import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadLocalExample { // Create a ThreadLocal variable private static ThreadLocal threadLocalValue = ThreadLocal.withInitial(() -> 0); public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(3); for (int i = 0; i < 3; i++) { executor.submit(() -> { int initialValue = threadLocalValue.get(); threadLocalValue.set(initialValue + 1); System.out.println("Thread " + Thread.currentThread().getName() + " value: " + threadLocalValue.get()); }); } executor.shutdown(); } }

ThreadLocal multithreading Java thread-safe concurrency