Java - Thread-Local Variables


A thread-local variable is a unique separated variable for each thread.

ThreadLocal class from java.lang package implements of a thread-local variable.

Method Description
get() get the value for a thread-local variable
set() set the value for a thread-local variable
remove()remove the value
initialValue() set the initial value of the variable. It has a protected access. To use it, you need to subclass the ThreadLocal class and override this method.

A Class That Uses a ThreadLocal Object to Track Calls to Its Method


class CallTracker {
  private ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>();

  public void call() {
    int counter = 0;
    Integer counterObject = threadLocal.get();

    if (counterObject == null) {
      counter = 1;//from   w  w  w .ja v  a2 s .co  m
    } else {
      counter = counterObject.intValue();

    // Set the new counter

    // Print how many times this thread has called this method
    String threadName = Thread.currentThread().getName();
    System.out.println("Call counter for " + threadName + " = " + counter);

public class Main {
  public static void main(String[] args) {
    // Let's start three threads to the method
    new Thread(Main::run).start();
    new Thread(Main::run).start();
    new Thread(Main::run).start();

  public static void run() {

    int counter = 5;
    // Print the thread name and the generated random number by the thread
        + " generated counter: " + counter);

    for (int i = 0; i < counter; i++) {
      new CallTracker().call();


Related Topics