ThreadLocal(随便记些……)

ThreadLocal 不是用来解决共享对象的多线程访问 问题的。一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。

线程各自独立的一个对象???获取的方式是,通过每个线程中的new对象的操作来创建的对象,每个线程创建一个,不是什么对象的拷贝或副本。

ThreadLocal.ThreadLocalMap:一个客户化的hash map仅仅适合于维护线程本地值。只能在ThreadLocal中使用,对外并不提供操作。ThreadLocalMap是属于包级别的;ThreadLocalMap中的key使用了WeakReferences。(hash table entries),当引用队列没有被用到时,旧的实体就会被GC回收(排除其他对其的引用)

可到达性:

从最强到最弱,不同的可到性级别反映了对象的生命周期。在操作上,可将它们定义如下:

  • 如果某一线程可以不必遍历所有引用对象而直接到达一个对象,则该对象是强可到达 对象。新创建的对象对于创建它的线程而言是强可到达对象。
  • 如果一个对象不是强可到达对象,但通过遍历某一软引用可以到达它,则该对象是软可到达 对象。
  • 如果一个对象既不是强可到达对象,也不是软可到达对象,但通过遍历弱引用可以到达它,则该对象是弱可到达 对象。当清除对某一弱可到达对象的弱引用时,便可以终止此对象了。
  • 如果一个对象既不是强可到达对象,也不是软可到达对象或弱可到达对象,它已经终止,并且某个虚引用在引用它,则该对象是虚可到达 对象。
  • 最后,当不能以上述任何方法到达某一对象时,该对象是不可到达 对象,因此可以回收此对象。

ThreadLocal的应用场合,觉得适合的是按线程多实例(每个线程对应一个实例)的对象的访问,并且这个对象很多地方都要用到。

你可能感兴趣的:(多线程,table)