ThreadLocal设计的目的就是为了能够在当前线程中有属于自己的变量,并不是为了解决并发或者共享变量的问题。
示例代码
package test;
import java.util.ArrayList;
import java.util.List;
public class MyThreadLocalTest {
private static ThreadLocal<List<String>> threadLocal = new ThreadLocal<>();
private void setThreadLocal(List<String> str) {
threadLocal.set(str);
}
private void getThreadLocal() {
threadLocal.get().forEach(name -> System.out.println("线程名称: " + Thread.currentThread().getName() + "###" + name));
}
public static void main(String[] args) {
final MyThreadLocalTest localTest = new MyThreadLocalTest();
new Thread(new Runnable() {
@Override
public void run() {
List<String> strs = new ArrayList<>();
strs.add("1");
strs.add("2");
strs.add("3");
localTest.setThreadLocal(strs);
localTest.getThreadLocal();
}
}, "t1").start();
new Thread(new Runnable() {
@Override
public void run() {
List<String> strs = new ArrayList<>();
strs.add("a");
strs.add("b");
strs.add("c");
localTest.setThreadLocal(strs);
localTest.getThreadLocal();
}
}, "t2").start();
}
}
运行结果
线程名称: t1###1
线程名称: t1###2
线程名称: t1###3
线程名称: t2###a
线程名称: t2###b
线程名称: t2###c
[0x7FFFD544E120] ANOMALY: meaningless REX prefix used
[0x7FFFBFA62640] ANOMALY: meaningless REX prefix used
[0x7FFFBFA62A50] ANOMALY: meaningless REX prefix used