zoukankan      html  css  js  c++  java
  • 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


    原文链接
     


     

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



     

  • 相关阅读:
    “我爱淘”冲刺阶段Scrum站立会议1
    《大道至简》阅读笔记3
    冲刺阶段站立会议每天任务3
    冲刺阶段站立会议每天任务2
    冲刺阶段站立会议每天任务1
    cnblogs体验
    《软件工程-理论、方法与实践》读书笔记三
    《软件工程-理论、方法与实践》读书笔记二
    《软件工程-理论、方法与实践》读书笔记一
    典型用户 persona
  • 原文地址:https://www.cnblogs.com/ConstXiong/p/12014739.html
Copyright © 2011-2022 走看看