ThreadLocal的使用理解

来源:互联网 发布:淘宝收藏加购物车软件 编辑:程序博客网 时间:2024/06/05 14:15

总结:ThreadLocal保证了变量在被多线程同时操作的时候,互不干涉。



public class TestNum {    // ①通过匿名内部类覆盖ThreadLocal的initialValue()方法,指定初始值    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) {        TestNum sn = new TestNum();        // ③ 3个线程共享sn,各自产生序列号        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 TestNum sn;        public TestClient(TestNum sn) {            this.sn = sn;        }        public void run() {            for (int i = 0; i < 3; i++) {                // ④每个线程打出3个序列值                System.out.println("thread[" + Thread.currentThread().getName() + "] --> sn["                        + sn.getNextNum() + "]");            }        }    }}


thread[Thread-0] --> sn[1]
thread[Thread-2] --> sn[1]
thread[Thread-1] --> sn[1]
thread[Thread-2] --> sn[2]
thread[Thread-0] --> sn[2]
thread[Thread-2] --> sn[3]
thread[Thread-1] --> sn[2]
thread[Thread-1] --> sn[3]
thread[Thread-0] --> sn[3]