温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
呃,同学们接下来呢,我们把那个所local呢,我们再来给大家解释一下啊,因为刚才呢,我们只是把它用了一下,但是我们接下来呢,再把原理呢,我们来说一下啊,同学们看我们回到这个U当中打开,打开当中我们是不是用到了一个啊,它这个site,它就等同于往我们的这个诶线程中去放,这句话怎么理解呢?我们来点击set,我点一下点点完以后大家看这个代码怎么了。它叫thread.current thread就是获取当前运行的线程,对不对,然后呢。它把这个线能传到这里来,叫get map,那么顾名思义在获取一个map对不对?这个map是什么?在最起码对于我们来讲应该是一个容器吧,所以我点击它,点它会从现程对象中获取一个这个东西叫thad locals,所以来后退,后退以后这个thread locals就是这个map,所以点点完以后,它是一个现成的一个也不要现成了,它是一个静态的一个类,内部类,这个类当中有一个叫entry entry当中有一个叫做什么value,那么大家想一想,这个是不是意味着它是可以存数据的,而这个存储数据是不是来自于我们的线程对象,所以我们就认为在我们当前的线程当中有一个容纳数据的一个空间,我们能不能这么理解?
01:28
没问题吧,同学们,这个地方咱们把它写上,大家看就是这个东西吧,所以放过来就是它。所以啊,这个叫做thread local map,就是这个东西啊,好了,当你拿到这块空间以后干什么呢?如果这个空间它不等于空,不等于,那怎么办?把你的value是不是就给它放进去了,诶给它放进去了,就是这么个意思啊,好了,那你能放,你能不能取呢?大家看这个叫get,这个叫get呢,我点一下,点点完以后是不是还是咱们的线程,当前运行的线程,只要线程不变,我就把它取过来,我还是取得那块内存空间嘛,同一块内存空间,因为线程没变嘛,然后呢,如果内存空间它不等于空怎么办?叫get entry啊,叫get entry,这个get entry之后,那么就把里面的数据拿了过来,然后只要不为空,取得它里面的value,把它的值拿到,对吗?就是这个意思啊。
02:32
好了,那么我们get没问题了,那么接下来叫做remove,我不想要了,那怎么办,把它删除掉,我点击叫remove,这个瑞木当中,大家看一下是不是还是我们的线程,还是取的那块内存空间,如果内存空间不等于空怎么办?叫做瑞木,诶,所以啊,能放能取,还能把它删除掉,这就是这块内存空间非趁的一个东西,所以啊,这是我们s local,它作为一个工具类可以帮咱们控制的一块内存,但是有的同学会误会说,老师,咱们的这个s local map,或者说这个能不能解决咱们的线程安全问题,我们说不能解决。
03:17
哎,老师,那你想想,我们现在这块内存中可以存储这个线程独立的数据,那你应该能够解决线程安全问题啊,其实你记住了,所谓的线程安全问题是多线程在执行的过程当中,它对共享内存中共享对象的属性修改所导致的数据冲突。所以在这种情况下,你的设置localo是解决不了的啊,你多线程同时执行,你也改我也改,那会出问题,你说你这能解决,你能不让他改吗?你这个做不到对不对,所以他只能共享数据,记住了啊,咱们的所的local的主要目的是共享线程当中的数据,它不是为了解决什么样的问题啊,把什么数据的什么冲突问题,这个它解决不了,所以大家不要误会了啊呃,S local呢,在我们的一些框架当中用的会非常的多,因为它要保证在线程当中共享数据对不对?所以这个类呢,需要大家下来呢再好好的理解一下,知道咱们在工作当中这种分层架构怎么实现一些基础架构,它里面的一些核心类是怎么回事儿,这个同学们需要稍微的注意一下好吧。
我来说两句