ThreadLocal概述:
ThreadLocal是Java中的一个线程局部变量工具类,它提供了一种在多线程环境下,每个线程都可以独立访问自己的变量副本的机制。ThreadLocal中存储的数据对于每个线程来说都是独立的,互不干扰。
使用场景:
在多线程环境下,需要保持线程安全性的数据访问。
需要在多个方法之间共享数据,但又不希望使用传递参数的方式。
基本用法:
1,创建ThreadLocal对象:
首先我们使用ThreadLocal对象来存储线程局部变量。可以使用ThreadLocal的默认构造函数创建一个新的实例。
ThreadLocal<String> threadLocal = new ThreadLocal();
2,设置线程局部变量:
使用set() 方法可以设置当前线程的局部变量的值。
threadLocal.set("sde");
3,获取线程局部变量的值:
使用
get()
方法可以获取当前线程的局部变量的值。
String s = threadLocal.get();System.out.println(s);
4,清除线程的局部变量的值:
使用
remove()
方法可以清除当前线程的局部变量的值。
threadLocal.remove();
完整版:
@Testvoid test(){ThreadLocal<String> threadLocal = new ThreadLocal();threadLocal.set("sde");String s = threadLocal.get();System.out.println(s);threadLocal.remove();}
}
示例代码:
下面是一个简单的示例代码,演示了如何使用ThreadLocal。
public class ThreadLocalTest {private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();public static void main(String[] args) {Thread t1 = new Thread(() ->{THREAD_LOCAL.set("sde666");getData("t1");},"t1");Thread t2 = new Thread(() ->{THREAD_LOCAL.set("sde888");getData("t2");},"t2");t1.start();t2.start();}private static void getData(String threadName){Object data = THREAD_LOCAL.get();System.out.println(threadName+"_"+data);}}