Java并发 - ThreadLocal类

ThreadLocal类用于创建线程局部变量,这些变量只能由同一个线程读取和写入。例如,如果两个线程正在访问引用相同threadLocal变量的代码,那么每个线程都不会看到由其他线程完成对threadLocal变量的任何修改。

ThreadLocal方法

以下是ThreadLocal类中可用的重要方法列表。

Sr.No。 方法&说明
1

public T get()

返回当前线程的此线程局部变量副本中的值。

2

受保护的T initialValue()

返回此线程局部变量的当前线程的"初始值"。

3

public void remove()

删除此线程局部变量的当前线程值。

4

public void set(T value)

设置当前线程的副本此线程局部变量的指定值。

示例

以下TestThread程序演示了ThreadLocal类的一些方法。这里我们使用了两个计数器变量,一个是普通变量,另一个是ThreadLocal。

现场演示
 
class RunnableDemo实现了Runnable {
int counter;
ThreadLocal<整数> 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());
}
}
公共类TestThread {
public static void main(String args []){
RunnableDemo commonInstance = new RunnableDemo ();
线程t1 =新线程(commonInstance);
线程t2 =新线程(commonInstance);
线程t3 =新线程(commonInstance);
线程t4 =新线程(commonInstance);
t1.start();
t2.start();
t3.start();
t4.start();
//等待线程结束
try {
t1.join();
t2.join();
t3.join();
t4.join();
} catch(例外e){
System.out.println("Interrupted");
}
}
}

这将产生以下结果。

输出

 
计数器:1
threadLocalCounter:0
计数器:2
threadLocalCounter:0
计数器:3
threadLocalCounter:0
计数器:4
threadLocalCounter:0

你可以看到计数器的值每个线程都会增加,但threadLocalCounter对于每个线程都保持为0。