ThreadLocal是什么?
1.ThreadLocal用来解决多线程程序的并发问题
2.ThreadLocal并不是一个Thread,而是Thread的局部变量,当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每个线程都 可以独立地改变自己的副本,而不会影响其它线程所对应的副本. 3.从线程的角度看,目标变量就象是线程的本地变量,这也是类名中“Local”所要表达的意思。API
void set(T value)
将此线程局部变量的当前线程副本中的值设置为指定值 void remove() 移除此线程局部变量当前线程的值 protected T initialValue() 返回此线程局部变量的当前线程的“初始值” T () 返回此线程局部变量的当前线程副本中的值
小例子
package com.shekhargulati.threadLocal;/** * Created by Administrator on 2016/9/2. */public class SequenceNumber { private static ThreadLocalseqNum = new ThreadLocal () { public Integer initialValue() { return 0; } }; public int getNextNum(){ seqNum.set(seqNum.get()+1); return seqNum.get(); } public static void main(String[] args){ SequenceNumber sn = new SequenceNumber(); TestClient t1 = new TestClient(sn); TestClient t2 = new TestClient(sn); TestClient t3 = new TestClient(sn); t1.start(); t2.start(); t3.start(); } private static class TestClient extends Thread { private SequenceNumber sn; public TestClient(SequenceNumber sn){ this.sn = sn; } public void run(){ for(int i=0;i<3;i++){ System.out.println("thread["+Thread.currentThread().getName() +"]sn["+sn.getNextNum()+"]"); } } }}