Java Eşzamanlılığı - ThreadLocal Sınıfı

ThreadLocal sınıfı, yalnızca aynı evre tarafından okunabilen ve yazılabilen evre yerel değişkenleri oluşturmak için kullanılır. Örneğin, iki evre aynı threadLocal değişkenine başvuran koda erişiyorsa, her evre diğer evre tarafından yapılan threadLocal değişkeninde herhangi bir değişiklik görmeyecektir.

ThreadLocal Yöntemleri

Aşağıda, ThreadLocal sınıfında bulunan önemli yöntemlerin listesi bulunmaktadır.

Sr.No. Yöntem ve Açıklama
1

public T get()

Geçerli evrenin bu yerel değişkene ait kopyasındaki değeri döndürür.

2

protected T initialValue()

Bu yerel evre değişkeni için geçerli evrenin "başlangıç ​​değerini" döndürür.

3

public void remove()

Bu yerel evre değişkeni için geçerli iş parçacığının değerini kaldırır.

4

public void set(T value)

Mevcut iş parçacığının bu yerel değişkene ait kopyasını belirtilen değere ayarlar.

Misal

Aşağıdaki TestThread programı, ThreadLocal sınıfının bu yöntemlerinden bazılarını gösterir. Burada iki sayaç değişkeni kullandık, biri normal değişken ve diğeri ThreadLocal.

class RunnableDemo implements Runnable {
   int counter;
   ThreadLocal<Integer> threadLocalCounter = new ThreadLocal<Integer>();

   public void run() {     
      counter++;

      if(threadLocalCounter.get() != null) {
         threadLocalCounter.set(threadLocalCounter.get().intValue() + 1);
      } else {
         threadLocalCounter.set(0);
      }
      System.out.println("Counter: " + counter);
      System.out.println("threadLocalCounter: " + threadLocalCounter.get());
   }
}

public class TestThread {

   public static void main(String args[]) {
      RunnableDemo commonInstance = new RunnableDemo();

      Thread t1 = new Thread(commonInstance);
      Thread t2 = new Thread(commonInstance);
      Thread t3 = new Thread(commonInstance);
      Thread t4 = new Thread(commonInstance);

      t1.start();
      t2.start();
      t3.start();
      t4.start();

      // wait for threads to end
      try {
         t1.join();
         t2.join();
         t3.join();
         t4.join();
      } catch (Exception e) {
         System.out.println("Interrupted");
      }
   }
}

Bu, aşağıdaki sonucu verecektir.

Çıktı

Counter: 1
threadLocalCounter: 0
Counter: 2
threadLocalCounter: 0
Counter: 3
threadLocalCounter: 0
Counter: 4
threadLocalCounter: 0

Her iş parçacığı tarafından counter değerinin arttığını görebilirsiniz, ancak threadLocalCounter her iş parçacığı için 0 olarak kalır.