一针见血系列[3]: 一针见血理解ThreadLocal类

栏目:一针见血 作者:admin 日期:2018-10-29 评论:0 点击: 1,136 次

ThreadLocal类是修饰变量的,重点是在控制变量的作用域,初衷可不是为了解决线程并发和线程冲突的,而是为了让变量的种类变的更多更丰富,方便人们使用罢了。很多开发语言在语言级别都提供这种作用域的变量类型。
根据变量的作用域,可以将变量分为全局变量,局部变量。简单的说,类里面定义的变量是全局变量,函数里面定义的变量是局部变量。
还有一种作用域是线程作用域,线程一般是跨越几个函数的。为了在几个函数之间共用一个变量,所以才出现:线程变量,这种变量在Java中就是ThreadLocal变量。
全局变量,范围很大;局部变量,范围很小。无论是大还是小,其实都是定死的。而线程变量,调用几个函数,则决定了它的作用域有多大。
ThreadLocal是跨函数的,虽然全局变量也是跨函数的,但是跨所有的函数,而且不是动态的。
ThreadLocal也是跨函数的,但是跨哪些函数呢,由线程来定,更灵活。
假设有三个线程,则对应三种线程变量的三个不同的作用域:
thread1: entry1-> entry2
thread2: entry2-> entry3
thread3: entry1-> entry2-> entry3
如上,线程变量的作用域更灵活吧。一个线程一个变量,而且线程跨越多少个函数,则这个变量也跨越多少个函数。
总之,ThreadLocal类是修饰变量的,是在控制它的作用域,是为了增加变量的种类而已,这才是ThreadLocal类诞生的初衷,它的初衷可不是解决线程冲突的。

一针见血系列[3]: 一针见血理解ThreadLocal类:等您坐沙发呢!

发表评论