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

}
相关文章
相关标签/搜索