00:00
各位上硅谷的朋友们大家好,欢迎继续收看上硅谷Java n IO课程,咱们继续学习NIO里边的其他内容。刚才呢,咱们完成这个type,也就是通道的讲解,那咱们来看下一个内容,关于这个叫fireo文件锁的内容,首先我们先说一下什么是文件所,也就是文件所的一个简介。文件所呢,在我们的操作系统中可以说很常见,如果说咱们多个程序同时访问或者修改同一个文件,这个时候很容易因为文件数据库同步而出现问题,所以这个时候呢,咱可以给文件加个锁,让同一个时间只能有一个程序修改这个文件,或者说只能有一个程序读取这个文件,这样的话这个问题就可以解决掉。但是文件所各位注意啊,有一个特别重要的特点,文件所是什么?是一个进程级别的,并不是县程级别的,它只能解决多个进程并发访问修改同一个文件问题,但是并不能解决多线程中的并发这个问题,而我们使用文件所同一个进程的里边的多个线程,它是可以去同时访问和修改文件的,这个各位给他特别注意一下啊。
01:26
而文件所大家可以理解为就是文件所这个特点啊,他在我们这个过程中。也就是呢,文件所呢,是当前程序所属的JVM实例所持有的,这个时候呢,一旦咱们获取到文件,咱们要么需要调用release方法,或者关闭对应的file,或者当前GM退出,这个时候这个锁才会进行释放,这各位知道一下。而我们这里边的,一旦某个进程,比如说GM,它对某个文件加了锁,那这个锁在释放之前,此进程是不能在这文件再次加锁,也就是说这个进程对文件是不能重复进行加锁的,所以这是关于文件所里面的相关的简介,各位对它相有一个基本的认识,所以这个我们做了一个说明。
02:20
然后这个说完之后,我们再看第二个关于文件锁的分类,文件锁呢,可以总体上分成两大类,一个叫排他锁,一个叫共享锁,什么叫排他锁呢?又叫做独占锁,也就是说呢,我们对文件加锁之后,那该进程可以对文件进行读写。该进程独占这个文件,而其他进程是不能读写此文件的,直到该进程释放文件锁之后,别的进程才能够对文件进行读写操作,这个叫排他锁,或者也可以叫独占锁。然后还有第二个锁叫做共享锁,什么叫共享锁呢?给各位解释一下。
03:04
当某个进程呢,对文件加了共享锁之后,那其他进程也可以访问此文件,但是这些进程的都只能读这个文件而不能写,因为它是线程安全的,只要还有一个进程持有共享锁,那此文件就只能读而不能进行写操作,这个叫共享锁,所以大家记住啊,文件锁两部分,一个排他锁,一个共享锁,这个我们说了第二个说明关于它的分类,然后下面有段代码,是它一个简单的一个事例,各位看一下啊,我这里面通过一个。China。然后里边得到文件这个通道,然后在里边用logo方法对它加锁。加锁之后,咱对它可以做一些多写操作,然后最终呢,就是释放锁。这个过程中咱是通过file channel对文件进行加锁进行使用的,所以这是我们说的它的一个最基本的示例,大家知道一下啊。
04:06
然后下面呢,给各位介绍一下我们获取文件锁的方法,包括里边的其他方法,咱们进一步来说明一下,最后咱会通过一个比较完整的例子给各位最终演示一下。那下面呢,我们看一下啊,获取文件锁的方法有哪些?这里边我一共列了四个方法,咱看一下,首先大家看第一个方法叫做log方法,这个方法呢,可以对整个文件加锁,默认是什么?叫做排他锁,就是咱们说那个独占锁,然后第二个lock里边可以加三个参数,首先我强调啊,前两参数它是表示对应文件的部分内容加锁,就是你对文件的哪些内容加锁。然后里边的第三个参数表示它是否是个共享锁,如果这个值是处,那就是共享锁,如果不是处,那就不是共享锁。这是咱们的前两种方法,就是用log方法实现里面的加锁。
05:07
然后除了log之外,还有两个方法叫这个trylo,首先trylo方法默认也是排他锁,其实你可以理解为是log方法,一个升级,还有一个叫trylo,里边加三个参数,和刚才参数一样,表示它的范围,包括是否是共享锁。所以现在咱们把加锁的四个方法给各位做了一个说明,各位把它知道一下啊。而这个过程中,我们进一步说明跟trylo有什么区别呢?你可以列解为lock是阻塞式的,而trylo是非阻塞的,当trylock尝试获取文件锁的时候,如果获取成功,那就返回锁,如果获取不到它,注意啊,是返回闹,而不会阻塞当前线程。所以这是我们提到的。
06:00
Local还有吹local这么两个的区别。然后除了这个之外,在fire中还有两个方法,一个叫shared,表示判断我这个文件锁是否是共享锁,还有一个叫E的,它表示这个文件所是否有效啊,所以这些是关于咱们针对文件所的一些基本介绍,各位把这些给到就是知道一下就可以了。然后咱们这些都说完之后,最后呢,咱们来写一个完整的例子,把文件所的相关操作给各位,最终咱们来演示一下。
我来说两句