Q:为什么要使用ThreadLocal?
可以让多个线程共享一个变量,使用该变量的值,但是没有办法做到变量的同步。
ThreadLocal该怎么使用?
有哪些方法可以使用呢:参照🔗:https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html
一个简单的小例子
创建两个类
MyRunnable:
package com.kk.ThreadLocalTest;
public class MyRunnable implements Runnable{
// new一个Runnable的对象,可以共用一个ThreadLocal对象
private final ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>() {
@Override
protected Integer initialValue() {
return 0;
}
};
@Override
public void run() {
System.out.println(threadLocal.get());
}
}
ThreadLocalTest
package com.kk.ThreadLocalTest;
public class ThreadLocalTest {
public static void main(String[] args) {
Runnable runnable = new MyRunnable();
// 开启线程
for (int i=0; i < 3; i++) {
Thread thread = new Thread(runnable);
// 执行run方法
thread.start();
}
}
}
3个线程共享了一个threadLocal,为了避免影响thread后续操作,记得在该线程中remove掉threadLocal变量。
ThreadLocal的原理
简单来说,就是该类中有一个Map<Thread, T>,会将每个线程的值存进去,所以各个线程互不干扰。
其他内容,可以参考该链接🔗:https://blog.csdn.net/qjyong/article/details/2158097?ivk_sa=1024320u