ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。
废话不多说直接撸代码
public class MyTestDemo {
ThreadLocal<Long> longLocal = new ThreadLocal<Long>();
ThreadLocal<String> stringLocal = new ThreadLocal<String>();
public void set() {
longLocal.set(Thread.currentThread().getId());
stringLocal.set(Thread.currentThread().getName());
}
public long getLong() {
return longLocal.get();
}
public String getString() {
return stringLocal.get();
}
public static void main(String[] args) throws InterruptedException {
MyTestDemo myTestDemo = new MyTestDemo();
myTestDemo.set();
System.out.println(myTestDemo.getLong());
System.out.println(myTestDemo.getString());
Thread thread = new Thread() {
@Override
public void run() {
myTestDemo.set();
System.out.println(myTestDemo.getLong());
System.out.println(myTestDemo.getString());
}
};
thread.start();
// thread.join(); 执行此语句意味着thread的线程的东西执行完后在去执行后面的语句 里面的参数表示如果设置时间之后子线程还没有结束 则开启父线程
System.out.println(myTestDemo.getLong());
System.out.println(myTestDemo.getString());
}
}
运行结果
undefined.
1
main
1
main
10
Thread-0
总结:
- 在get之前如果没有set 则会出现空指针
- 如果没有set 也可以在创建threadlocal的时候初始化默认值
网友评论