public class ThreadLocal<T> extends Object
该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。
方法摘要 | |
---|---|
T | get()
返回此线程局部变量的当前线程副本中的值。 |
protected T | initialValue()
返回此线程局部变量的当前线程的“初始值”。 |
void | remove() 移除此线程局部变量当前线程的值。 |
void | set(T value)
将此线程局部变量的当前线程副本中的值设置为指定值。 |
实验代码如下:abstract class Base { abstract public int get(); abstract public void set(int value); } class AA extends Base { ThreadLocal<Integer> i=new ThreadLocal<Integer>() { public Integer initialValue() { return 0; } }; public int get() { return i.get(); } public void set(int value) { this.i.set(value); } } class BB extends Base { int i; public int get() { return this.i; } public void set(int value) { this.i=value; } } class Test implements Runnable { Base b; public Test(Base b) { this.b=b; } @Override public void run() { for(int i=0;i<3;i++) { this.b.set(this.b.get()+10); System.out.println( Thread.currentThread().toString()+this.b.get()); } } } public class ThreadLocalTest { /** * @param args * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { System.out.println("===============使用ThreadLocal结果如下:=================="); AA aa=new AA(); Thread t11=new Thread(new Test(aa)); Thread t12=new Thread(new Test(aa)); Thread t13=new Thread(new Test(aa)); t11.start(); t12.start(); t13.start(); Thread.sleep(1000); System.out.println("===============不使用ThreadLocal结果如下:=================="); BB bb=new BB(); Thread t21=new Thread(new Test(bb)); Thread t22=new Thread(new Test(bb)); Thread t23=new Thread(new Test(bb)); t21.start(); t22.start(); t23.start(); } }
运行结果:
java ThreadLocal,布布扣,bubuko.com
原文:http://blog.csdn.net/ylb125/article/details/38236071