示例:
import java.io.Serializable; public class TestThreadLocal implements Serializable { /** * */ private static final long serialVersionUID = -1279921928557717157L; int age; public static void main(String[] argv) throws Exception { TestThreadLocal tt = new TestThreadLocal(); Testthread t1 = new Testthread(tt); Testthread t2 = new Testthread(tt); Testthread t3 = new Testthread(tt); t1.start(); t2.start(); t3.start(); } static int ii = 0; // static Integer ii = 0; // public Integer getIi() {// 这个方式不行 // ii ++; // return ii; // } public Integer getIi() { // tl.set( ii ++ ); // 这个方式也不行, 必须要下面的方式。 tl.set(tl.get() + 1); return tl.get(); } /** * { } 内部的初始化是必须的。 否则出现 nullpointexception */ ThreadLocal<Integer> tl = new ThreadLocal<Integer>() { protected Integer initialValue() { ii = 0; return ii; }; }; } class Testthread extends Thread { TestThreadLocal ttl; public Testthread(TestThreadLocal ttl) { this.ttl = ttl; } @Override public void run() { String name2 = Thread.currentThread().getName(); for (int i = 0; i < 3; i++) { System.out.println(" name " + name2 + ttl.getIi()); } } }
ThreadLocal 的作用在于,将某些变量绑定到线程中去, 提供一种,线程安全的方式操作某些变量。