ThreadLocal简介及应用场景简介说明
下文笔者讲述ThreadLocl简介及应用场景说明,如下所示
ThreadLocal使用示例
ThreadLocal简介
ThreadLocal:
是线程中的局部变量
每个线程都会创建一个ThreadLocalMap对象
每个线程可访问自己内部ThreadLocalMap对象内value
采用ThreadLocal可避免资源在多线程间共享
ThreadLocal原理
我们都知道线程局部变量是局限于线程内部的变量
这个变量属于线程自身,在多线程之间不会共享
JDK使用ThreadLocal类来支持线程局部变量
是一种实现线程安全的方式
注意事项:
web服务器中,
工作线程的生命周期比任何应用变量的生命周期都要长
任何线程局部变量一旦在工作完成后没有释放
所以我们使用ThreadLocal,可能会存在内存泄露的风险
ThreadLocal使用场景
每个线程分配一个JDBC连接Connection
每个线程的都在各自Connection上进行数据库的操作
都采用ThreadLocal存储数据库连接
则不会出现"线程A"关闭"线程B"正在使用Connection等问题
例:ThreadLocal使用示例
public class ThreadLocalTest {
//线程本地存储变量
private static final ThreadLocal<Integer> THREAD_LOCAL_NUM
= new ThreadLocal<Integer>() {
@Override
protected Integer initialValue() {
return 0;
}
};
public static void main(String[] args) {
for (int i = 0; i <3; i++) {//启动三个线程
Thread t = new Thread() {
@Override
public void run() {
add10ByThreadLocal();
}
};
t.start();
}
}
/**
* 线程本地存储变量加 5
*/
private static void add10ByThreadLocal() {
for (int i = 0; i <5; i++) {
Integer n = THREAD_LOCAL_NUM.get();
n += 1;
THREAD_LOCAL_NUM.set(n);
System.out.println(Thread.currentThread().getName() + " : ThreadLocal num=" + n);
}
}
}
------运行以上代码,将输出以下信息--------
Thread-0 : ThreadLocal num=1 Thread-1 : ThreadLocal num=1 Thread-0 : ThreadLocal num=2 Thread-0 : ThreadLocal num=3 Thread-1 : ThreadLocal num=2 Thread-2 : ThreadLocal num=1 Thread-0 : ThreadLocal num=4 Thread-2 : ThreadLocal num=2 Thread-1 : ThreadLocal num=3 Thread-1 : ThreadLocal num=4 Thread-2 : ThreadLocal num=3 Thread-0 : ThreadLocal num=5 Thread-2 : ThreadLocal num=4 Thread-2 : ThreadLocal num=5 Thread-1 : ThreadLocal num=5
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


