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()+"]"); } } } }