00:00
各位同学大家好,我们继续来学习doc高并发编程,刚才给大家演示了a release这个线程不安全问题,当你用多个线程,一边往里边放,一边从里边取,会产生这个并发修改异常,因为咱也看到我们例它的方法里边并没有加上s night的关键字,所以会产生这个问题。那这问题怎么解决呢?下面给各位来说一下,我们这里边提供了三种解决方案,第一个方案咱们用这个victor,第二个用collections。第三个通过copy on right这个写实复制技术最终实现。所以下面我把三种方案给各位最终来演示一下。首先我们看第一个方案,通过victoror来解决,然后这个vior我们可以先看一下,在Java u包中有一个list接口,在list中除了a release之外,下面还一个时验内叫做VE,而通过VE就能解决这个线程不安全的问题,那下面给各位来演示一下,我在这里边写一下。
01:16
首先这一行在什么,我先注掉,然后下面呢,我给它换一个新的一个类,这个名字就叫做victoror,然后咱们就扭上一个victoror,而扭完之后,下面咱们把这个代码执行一下,我们看一下它的效果怎么样。比如说大家看我已执行效果是不是正确的,我这里边比如我再执行多次。咱们再直销。大家发现我执行多次效果是不是也是正确的,它就没有产生那个并发修改异常,那咱们同样看一下VI这个源码中,也是找到里边那个A的方法,大家看到啊,在它的A的方法上边,咱看它的这个特点,各位能看到他的方法上边你看都加了什么。
02:08
是不是这个sight这个关键字,所以它里边就解决这个并发这个问题,因为它通过S的关键字最终来解决里边这个相关的这个问题。所以咱们现在都用victor完成了一个解决,包括你看it方法上面都加了这个nice的关键字。当然这种方案呢,实际中我们用的并不是特别多,因为这种方案算是一种比较古老的方案,大家看它是在JDK1.0的时候出现的一个方案,所以咱们这些问题呢,我们可以有另外的方案,那下面呢,给大家再来演示另外一个方案,这个方案是什么呢?咱们通过一个工具类叫做collections。那咱们通过API文档找一下这个工具类。
03:00
我们来找一下,就这个类叫collections,然后在collection里边有很多的这个方法,它的方法大家看到是不是都是静态的,然后咱们找到里边的一个方法,咱们往下找一下,各位看这个方法叫什么S的是不是例思的,这里写到它返回列表支持什么同步的这么一个列表,也就是一个线程安全列表,所单用它就能解决咱们这个问题。那我下面把这个给大家,咱们来演示一下,首先我加个注释,这是我们通过这个veor来进行的这么一个解决。然后下面呢,我们再说另外的一种解决方案,这一行我先注掉,然后下面的做法就是在里边呢,咱直接用这个collections。工具类里边它有一个方法,这个方法叫做S的list的,在s list中咱们可以传入这么一个list集合,比如现在我new上一个a list,现在这个问题就可以解决了,这是我们的第二个解决方案,通过这个collection,这个工具类里面的方法,咱们完成这么一个解决。
04:21
那这个选之后,下面我把这个代码我们来执行一下,咱们看一下它的效果怎么样,比如说你看第一次没有问题,我执行第二次。包括我在执行第三次,就是现在咱们进行多次,这个问题都可以进行解决,所以这是我们的第二种方案,这各位那知道啊,当然这两种方案呢,应该说都比较古老,实际我们用的几率不是特别大,但是也能解决,而实际中咱经常用的是我们guc里边的解决方案,在doc中呢,给咱们提供了一个类,这个类的名字,这个名字叫copy on right a list,那这个类咱们可以看一下,还是找到咱们这个文档中。
05:10
在文档中我们来找一下这个类,注意是在doc里边,然后大家看到这个类copy on right agree list,用它就能解决咱们这个线程不安全问题啊,那一会儿给大家做演示,各位先知道我们的这两种方案,Victor,还有这个collections这么一个工具类。
我来说两句