ThreadLocal

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

}
相關文章
相關標籤/搜索