线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。
ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问时, 能保证各个线程的变量相对独立于其他线程内的变量。
/** * @author chong.zuo * @date 2020/12/29 17:03 * * 1.传递数据:通过ThreadLocal类在同一个线程不同组件中传递共享数据。 * 2.线程隔离:ThreadLocal提供线程局部变量,每个线程变量都是独立的,不会相互影响。 */ public class ThreadLocalTest { static ThreadLocal<String> tl = new ThreadLocal<>(); private String content; public String getContent() { String content = tl.get(); return content; } public void setContent(String content) { tl.set(content); //this.content = content; } public static void main(String[] args) { ThreadLocalTest test = new ThreadLocalTest(); for (int i = 0; i < 5; i++) { Thread thread = new Thread(new Runnable() { @Override public void run() { test.setContent(Thread.currentThread().getName() + "的数据"); System.out.println("====================================="); System.out.println(Thread.currentThread().getName() + "----->" + test.getContent()); } }, "thread" + i); thread.start(); //解绑当前线程绑定的对象, 防止内存泄漏 tl.remove(); } } }
ThreadLocal与volatile区别:
volatile: 多线程访问共享变量的可见性, 线程内存变量副本对主内存变量的可见性。
ThreadLocal: threadlocal类提供线程局部变量, 每个线程的变量都是独立的相互隔离的。