首页 > 代码库 > java ThreadLocal

java ThreadLocal

public class ThreadLocal<T> extends Object
该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 getset 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。
方法摘要
 Tget()           返回此线程局部变量的当前线程副本中的值。
protected  TinitialValue()           返回此线程局部变量的当前线程的“初始值”。
 voidremove()           移除此线程局部变量当前线程的值。
 voidset(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();	}}
 
运行结果: