00:00
好,接下来呢,我们就来具体的实现一下代码,那我们来看一下啊,这个代码我们应该怎么写呢?它包含几部分。哎,捋一下思路啊,首先呢,这边呢,有一个客户端,那么客户端要跟这个集群,是不是要创建这种临时的带序号的节点。对吧,哎,这是创建,然后呢,你创建完节点之后,你是不是还得判断说我创建这个节点,它是不是当前序号最小的那个节点。如果是的话,那我就直接可以获取锁了,如果不是,你是不是还得对前一个节点进行一个监听啊。对吧,啊,这是监听,那我是获取的这把锁,那同时我还可以释放锁,什么叫释放锁,那就是这个。比如说我将这个节点删除掉,那是不是这个锁就释放掉了?啊,那包含这么几部代码,那我们稍微来写一下啊,一步一步来写。首先拿到它啊,这个是分布式锁。
01:00
OK,我在这里再创建一个。报名。K2啊,第二个案例。这是一个分布式锁的案例。行,那下面我要做哪些事情呢?首先我这里是一个是客户端,一个是服务端,他们两个之间是不是得先建立连接呀啊。那建立连接在哪里建立呢?我就创建一个构造吧,啊在构造里面去做这件事情。先捋清楚做几件事啊,第一件事儿呢,我就获取。连接哎,比如说连接上这个CK。那连接上之后大家再看一下啊,那我后面要监听的是这个路径。对吧,哎,今天这个路径,那这个路径是不是有可能存在,有可能不存在。如果不存在的话,我是不是得先把这个路径给它创建出来,如果没存,如果存在的话,是不是正常往下走就行了,所以说这块要判断。
02:03
根节点。谁呢,洛克斯?是否存在?OK,那这是在正常情况下,你创建一个对象,然后获取上连接,然后保证这个根基点存在,这是要做的。那下面的话呢,就要创建干什么事呢,要创建一个家属的方法。Public。外地所。这个是对这个JK加速。加啊说。呃,枷锁啊。OK吧,嗯,加锁,那下面呢,还有一个呢,就是解锁。
03:06
解锁,那解锁我再来一个方法OID啊,那这个呢,就是。JK。OK吧?那加锁方法和解锁方法里面分别都要干什么事呢?大家思考一下。所谓的枷锁是不是就是我这个客户端在对应的这个根目录下。创建对应的节点呢,对吧,哎,那这里面就是创建。不一样的。临时。带序号。节点,OK,创建这个节点,然后接下来还要做判断,判断什么呢?判断你当前节点,它是不是整个这个根目录下最小的那个节点。如果是的话,直接获取到数,如果不是再进行监听知道吗?啊在这里面。
04:00
判断。创建的节点。是否是最小的?序号节点。对吧,哎,然后进行,如果是。获取到手。如果不是。那就要监听。监听谁呢?哎,监听它前一个节点,比如说你这个比你这个序号小的那个前一个节点,对吧?啊监听。序号。前一个。这不就行了吗?好,那我们捋一下这个思路啊,首先第一步啊是获取连接,然后呢,判断这个根节点是否存在,哎,如果存在那还好,不存在创建。那将来呢,就是枷锁,那所谓的枷锁就是创建一个临时的带序号的节点。然后对它进行判断,判断这个节点它是否是最小的,哎,整个这根目下最小的,如果是直接会一到数,不是的话,那我们就监听这个节点,那好,那下面我还要释放这个节点啊,释放这个锁。
05:10
那释放这个锁。那非常简单了。那就删除节点就行了。对吧,你所谓的释放,你把它直接一删除,那它自动把这个锁是不是给下一位了。你看这就是我们整体代码的一个思路,那下面我们一步一步来呗,首先从那个呃,连接这块获取链接。嗯,获取连接那就是。一个。Keepper对吧?哎,那这里面对应的参数啊,已经写了很多遍了啊。Today,然后呢,Seon啊,Time。OK,然后这里面有一个water。对吧,哎,那这个呢,我们起个名字啊叫JK。可以吧,然后一个一个创建out加回车。
06:02
那这个注意事项不能有空格。I1022181。HIOP1032181,哎,你看这地方空格数不行啊,干掉啊。然后再来一个。Hi do 104。2181。OK吧,然后三。2000搞定,搞定之后这个异常跑出。对吧,然后把它呢,变成这个全机变量CL out加F。看,这就是获取对应的链接。那么这个连接它有没有真正的连接上这个主。哎,那这里面我们如果是这个代码,如果比较健壮的话,我们可以加一个这个东西啊,这个A片啊叫private。Count啊,当。那呢啊,起个名字connect。
07:00
等于又一个来。嗯,来个一,它有什么用呢。这里面你点它之后。呃,拿到这里面下面。第二位。所谓的含义是什么呢?出去啊。它是等待这个主K真正的连接上。哎,只有上面这个连接上之后,那么它才往代码往下走。哎,这个代码呢,健壮性啊更好一些,你说等待CK。正常连接后。往下走。能懂意思吧,哎,相当于主色等待前一个进程,OK啊,这个线程啊,一个线程结束。行了,哎,这是这一块啊,它是等待那下一步是不是就开始判断这个节点是否存在了。那这个怎么判断呢?点一下哎,那这是Z k.exist是不判断某一个节点是否存在是它呀,哎,然后路径,那路径的话,我们就判断这个下面CK斯它是否存在。
08:10
那这用不用监听呢?哎,这里面我就不监听啊,不用监听了啊。啊,这样就获取对应的。状态信息。把这个异常抛出去。对吧,哎,这是这块,那好,那下面我就要对这个节点这个状态进行一个判断,If如果说它能够获取到这个状态。那就说明。你说它如果它不等于空,那就说明这个节点已经存在了,对吧,我就不需要再创建了吧,对,但是现在如果它返回的是空,那我是不是我需要。创建一下。根结的。是这样吗?那创建根节点的命令就是J k.great。那就创建呗,那这里面los老斯。放在这个节点,那里面的内容呢,我就放一个L4。
09:02
点get best。可以吧,然后节点的ID4点。Open。然后创建一个节点类型,这个节点类型是不是得是永久的呀,因为是根节点嘛,所以说这里面创建一个永久的节点。OK吧?这样就OK了。行,那现在呢,就是哎,判断一下这个根节点是否存在啊,如果不存在的话,那我们就创建一下,存在的话,正常往下走就完事了啊,这是我们在创建构造的时候完成这么两件事情。比如说现在代码相当于哪块人称了呢?他判断了一下它是否存在。哎,他们两个之间已经建立连接,判断它如果不存在,我就已经把它分解好。那下一步该干嘛了?下一步是不是就开始加锁了呀?比如说客户端在这个根节点下边创建对应的节点,就干这件事情吧,OK,好。我们来看啊。
我来说两句