ThreadLocal简介及应用场景简介说明

乔欣 Java面经 发布时间:2022-11-13 21:39:39 阅读数:20220 1 并发编程面试题(2023最新版)
下文笔者讲述ThreadLocl简介及应用场景说明,如下所示

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
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaMianJing/202211/16683468384894.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者