(1)ThreadLocal 解决共享变量的问题

1.ThreadLocal简介                              

    “水能载舟,亦能覆舟”,形容ThreadLocal最为贴切,因为它的初衷是在线程并发时,解决变量共享的问题,但是由于过度设计,比如弱引用、哈希碰撞,导致理解难度大,使用成本高,反而成为故障高发点,容易出现内存泄漏,脏数据、共享对象更新等问题。也许你认为它包治共享变量的问题,然而并不是。下面从内存模型,弱引用,哈希算法角度分析:

2.ThreadLocal 应用场景

讨论ThreadLocal用在什么地方前,我们先明确下,如果仅仅就一个线程,那么都不用谈ThreadLocal的,ThreadLocal是用在多线程的场景的!!!

ThreadLocal归纳下来就2类用途:

  • 保存线程上下文信息,在任意需要的地方可以获取 

  • 线程安全的,避免某些情况需要考虑线程安全必须同步带来的性能损失! 

一、引用类型介绍

    对象在堆上创建之后所持有的引用其实是一种变量类型,引用之间通过赋值可以构成引用链。从GC Root开始遍历,判断引用是否可达,引用的可达性是判断能否被垃圾回收的基本条件。根据引用类型语义的强弱可以决定垃圾回收的阶段。

  1. 强引用(Strong Reference): Object object=new Object();这样的变量声明和定义就会产生对该对象的强引用。只要对象有强引用指向,并且GC Root可达,那么Java内存回收时,即使内存濒临耗尽,也不会回收该对象。
  2. 软引用(Soft Reference): 引用力弱与强引用,用在非必须对象的场景。在即将OOM之前,垃圾回收器会把这些引用指向的对象加入回收范围,以获

猜你喜欢

转载自blog.csdn.net/qq_41893274/article/details/105245459