美文网首页
ThreadLocal

ThreadLocal

作者: salix_ | 来源:发表于2020-03-30 17:38 被阅读0次

    一:作用

    ThreadLocal其实就是一个变量,比如String,Integer,你可以进行指定。比如现在全局有个内置Integer的ThreadLocal。你可以开启多个线程,每个线程都对这个变量进行set,get,他们都是互不冲突的。(相当于每个线程都有自己的一份拷贝,修改这个值对其他线程里的这个变量没有影响)。
    经典的使用场景是为每个线程分配一个 JDBC 连接 Connection。这样就可以保证每个线程的都在各自的 Connection 上进行数据库的操作,不会出现 A 线程关了 B线程正在使用的 Connection; 还有 Session 管理 等问题。

    二:简单使用

    创建一个Integer类型的ThreadLocal

    三:方法

    四:实现原理

    看一个set方法,200行写获取当前的线程t。然后201行时得到一个ThreadLocalMap的变量。通过名字就看出来了,其实就是通过当前线程得到一个值的映射。然后进行set操作。
    点开getMap方法,返回的是一个线程的变量,点开这个变量我们就会跳转到Thread.java文件里面,说明每一个线程都有一个threadLocals对象。

    五:简单原理总结:

    TheadLocal是一个泛型类,保证可以接受任何类型的Object。每个线程内部都会维护一个ThreadLocalMap,这个map的key是弱引用。
    如果都没有手动删除对应key,都会导致内存泄漏。
    所以将线程的threadlocalmap里对应的key设置成弱引用。引用ThreadLoacl的引用没有了,即使没有手动删除,这个key也会被设置成null,然后value下次调用get、set、remove的时候都会删除key=null的value。

    相关文章

      网友评论

          本文标题:ThreadLocal

          本文链接:https://www.haomeiwen.com/subject/minvuhtx.html