Java Concurrency 简明教程
Java Concurrency - ThreadLocal Class
ThreadLocal 类用于创建线程局部变量,该变量只能被同一线程读写。例如,如果两个线程正在访问对同一 threadLocal 变量有引用的代码,那么每个线程将看不到其他线程对 threadLocal 变量所做的任何修改。
ThreadLocal Methods
以下是 ThreadLocal 类中可用的重要方法列表。
Sr.No. |
Method & Description |
1 |
public T get() 返回此线程局部变量当前线程副本中的值。 |
2 |
protected T initialValue() 返回此线程局部变量当前线程的“初始值”。 |
3 |
public void remove() 删除此线程局部变量的当前线程值。 |
4 |
public void set(T value) 将此线程本地变量的当前线程副本设置为指定的值。 |
Example
以下 TestThread 程序展示了 ThreadLocal 类的其中一些方法。此处我们使用了两个计数器变量,一个是普通变量,另一个是 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");
}
}
}
这将产生以下结果。