00:00
各位同学大家好,下面呢,咱们继续来演示集合的程安全问题,刚才呢,给大家演示了是这个A集合的线程不安全的问题。而咱们说了里边的个解决方案,包括我们用这个VI进行解决,包括咱们用这个collection这么一个工具类我们进行解决,以及我们现在用里面那个叫copy啊。Write写实复制技术来解决,刚才我们把这个方案包括代码我们都做了一个实现,那这个说完之后呢,下面给各位说另外一个集合,咱们再来演示,里边这个就是哈希site,包括哈希麦克这个线程不安全问题,包括他们的解决方案,那我下面先给大家演示一下这个哈希赛。他这个线程不安全的这么一个演示,包括它的解决方案,那下面给各位同学我在里边来写一下,然后咱们看一下。
01:08
首先这段代码我先给条注掉,然后咱下面写一个就是哈西set这么一个演示,那我来写一下。我用它直接咱们来修改一下,写这个位置啊,咱就来演示这个哈西set。然后把这代码过来改一下,首先我们创建一个set集合,它的名字我们就叫set,然后咱们new上一个就叫哈西带,把这个创建,然后扭完之后我们向S中来放入它的值,最终把S集合再给它获取出来,并且咱们也是循环多次创建多个线程,最终把这个做实现。包括各位看一下,这里边有一个A的方法,而它的A的方法中是不是也没有加上那个sight的这个关键字,所以咱们在这个操作过程中,它也会产生这个就是现成的这个安全问题。
02:13
啊,包括啊,咱们通过这个看一下哈西塞这么一个类,然后它里边这个A的方法里边也并没有加上这个nice的关键字,所以它有咱们刚才讲的问题,那下面我们来演示一下啊。首先我把这个代码咱们先执行一下,然后咱们看一下它里面的效果是怎么样,比如说啊,咱们把这值给它。改一下啊,给他多进行几次,然后把它的问题我们来演示出来。你看啊,现在我执行了多次,然后里边出现了是不是这个并发修改问题啊,所以咱需要把它来解决一下,那怎么解决呢?看一下这个API文档中,在doc里边呢,针对哈西site也提供了这么一个类,它的名字跟刚才类似,它叫做copy on right a reet,用它能解决这个哈,Set里面这个就是线程不安全这个问题。
03:17
那下面咱们把它来改造一下,然后咱们再做个测试,那现在我来改造一下。然后咱们new上一个叫copy on right a that,把这个给它扭一下,New完之后,现在我再进行执行。比如说咱们也是执行多次。给他多几次执行,然后这个过程中应该就不会出现我们说那异常问题,所以现在咱就把这个哈希set里面这个线程不安全问题我们做了一个解决,然后它的解决方案就是我们通过这么一个类来进行解决。
04:01
我这里边完善一下叫copy on right和ET,所以这是我们说的第二关于哈set的接容不安全的解决,然后哈西set各位应该知道啊,哈西其实它的底层就是什么。是不是就是一个hot map指咱们在操作中,我们是像这个里边放着它的key,包括Y表,因为大家知道set的最大特点是什么,它是不是无去的,就是里边另外不能放充元素,因为它里边是往map中放数据,你发现啊,它的值就是map的key,所以它里边第一个不能重复,第二个是无序的,所以这是关于哈希set这么一个演示,各位把这个知道。然后这个演示之后,下面呢,给大家再演示另外一个就是哈希麦克这个线程不安全的演示,那我来写一下。就是我们的这个里边。
05:01
5.3。卡西map这个线程不安全的演示,咱们还是通过代码我们来演示一下。那现在啊,我把这个代码,比如说在复利粉,然后咱我们看一下。或者里边加个注释。演示海信脉搏。那首先我在里边呢,咱们就创建一个map集合,然后map里边它的key和value,咱为了方便都叫缀。Map等于。上一个哈希map,把这个我们先创建出来。创建之后,我们现在向map中加入内容,比如说我现在先写上它的key,这个key呢,我就用这个遍历这个I的这个值作为它这个T,另外咱们向map中加数据这一代码,我们改一下,用map点。
06:01
Put方法里边两个参数,第一个是我们这个K,第二个是我们这个外表,然后最终我把map做一个输出,所以现在这段最基本的测试代码就完成了,咱们创建多个线程往里边放那种,并且从里边取那种,那下面我把它执行一下,咱们看一下里边这个效果。大家看出现了是不是还是这个并发修改的这么异常,因为这个map里边的po的方法上边也并没有加上那个SENE的关键字,所以它引一个线程不安全的,那这个问题怎么解决呢?咱们看一下这个API文档中,找到doc包里边大家看这个类叫做卡con current哈希map,通过它能解决哈西map这个线程不安全问题。那我下面把它来改造一下,然后咱们再做一个测试。
07:02
那我来写一下,这个叫concurrent哈希map,现在我们就改造了,改造之后最终咱们把它执行一下,然后咱们看一下,比如现在我这里边执行多次。咱们发现是不是他就没有出现那个并发修改的异常,所以现在这个咱们就完成了,最终把这个给大家来总结一下,我们刚才讲到的这些内容。来,我们来看一下啊。首先我们这里a release肯定是一个线程不安全的,然后在a release里边,如果咱要解决它,这个就是线程不安全问题,那我们该怎么做到呢?里边就是种这么几种解决方案,首先第一个方案用VI,第二个用collections,第三个用这个copy on right的意思,这个是doc中的这么一个类,然后第二个呢,咱们说到这个叫哈西site。
08:03
哈西set也是一个线程不安全的,然后这个如果说咱们要解决问题怎么做,在doc里边有个类,这个名字叫copy on right or reet,跟这个list集合,这个list类似,另外哈map也是切生关全的,那我们用这个叫concuent map,把这个给解决。所以现在这个线程不安全的这个兴闻问题,咱们就演示完成了,分别演示了历史的set和map相关的这个问题。
我来说两句