java ThreadLocal

public class ThreadLocal<T> extends Object
该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 getset 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。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

java ThreadLocal,布布扣,bubuko.com

java ThreadLocal

上一篇:Java之------------------- String


下一篇:Java 之--------------------- 强大的API