ThreadLocal和线程同步都是为了解决多线程中,相同类型变量的访问冲突问题 ThreadLocal为每一个线程提供了一个独立的变量副本,从而解决了多个线程对变量的访问冲突。ThreadLocal提供了
ThreadLocal为每一个线程提供了一个独立的变量副本,从而解决了多个线程对变量的访问冲突。 ThreadLocal提供了get方法,获取与当前线程绑定的变量副本。 同时我们可以通过set方法来把某个资源设定为当前线程的变量副本。 我们可以显式调用romove方法,删除当前线程的变量副本,即使我们不调用,在线程结束之后,也会被自动回收。 intialValue返回当前线程局部变量的初始值 package com.test; public class TestNum { // ①通过匿名内部类覆盖ThreadLocal的initialValue()方法,指定初始值 private static ThreadLocalseqNum = new ThreadLocal () { 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() + "]"); } } } }