• ThreadLocal有什么作用?有哪些使用场景?


    ThreadLocal 是线程本地存储,在每个线程中都创建了一个 ThreadLocalMap 对象,每个线程可以访问自己内部 ThreadLocalMap 对象内的 value。通过这种方式,避免资源在多线程间共享。

    经典的使用场景是为每个线程分配一个 JDBC 连接 Connection。这样就可以保证每个线程的都在各自的 Connection 上进行数据库的操作,不会出现 A 线程关了 B线程正在使用的 Connection; 还有 Session 管理 等问题。

    ThreadLocal 使用例子:

    public class TestThreadLocal {
        
        //线程本地存储变量
        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);
            }
        }
        
    }
    打印结果:启动了 3 个线程,每个线程最后都打印到 "ThreadLocal num=5",而不是 num 一直在累加直到值等于 15
    
    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


    原文链接
     


     

    所有资源资源汇总于公众号



     

  • 相关阅读:
    获取Web.config的内容
    VS2013打开2008的项目
    Win7配置IIS7
    JavaScript通知浏览器,更改通知数目
    高分屏显示模糊修复工具
    Linux下使用 xrandr 命令设置屏幕分辨率
    虚拟机VMware怎么完全卸载干净,如何彻底卸载VMware虚拟机
    虚拟机安装VMware Tools
    网站测速、ping
    有名管道的非阻塞设置
  • 原文地址:https://www.cnblogs.com/ConstXiong/p/12014739.html
Copyright © 2020-2023  润新知