ThreadLocal是什么?多线程
1.ThreadLocal用来解决多线程程序的并发问题
2.ThreadLocal并非一个Thread,而是Thread的局部变量,当使用ThreadLocal维护变量时,ThreadLocal为每一个使用该变量的线程提供独立的变量副本,因此每一个线程都
能够独立地改变本身的副本,而不会影响其它线程所对应的副本.
3.从线程的角度看,目标变量就象是线程的本地变量,这也是类名中“Local”所要表达的意思。并发
APIthis
void set(T value)
将此线程局部变量的当前线程副本中的值设置为指定值
void remove()
移除此线程局部变量当前线程的值
protected T initialValue()
返回此线程局部变量的当前线程的“初始值”
T get()
返回此线程局部变量的当前线程副本中的值线程
小例子rem
package com.shekhargulati.threadLocal; /** * Created by Administrator on 2016/9/2. */ public class SequenceNumber { private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>() { 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()+"]"); } } } }