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
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。