00:00
接下来我们给大家演示第三种罗support,利用它的park and park方法同样可以实现我们的等待和唤醒机制,那么请同学们细细体会它是如何突破前面的使用条件的。那么来看看我们的lockport,它的强大之处对比和之前有什么区别。走起。首先support是通过park。按帕方法来实现现成的阻塞和唤醒,那么这个时候我们来看一下官网啊,有一段话非常重要,那么这段话,那么也就是我们这儿OK这小段过来的翻译,那么对于这个阻塞原语我们稍后再说,但是从这我们可以看得出。是使用那一种名叫什么permit许可证的概念来做到阻塞和唤醒线程的功能。那么有点类似于你进地铁的。刷闸机的地铁通行卡,以及大家上ETC高速公路通过的那张卡片,有证才能进去,每这当然会被拦下来。OK,每个线程都有一个许可证,但是与C不同,注意这块是哪来的,这有个红线。
01:09
括号里面这段比较重要,他这儿呢,意思就是说你这个许可证permit是不可以累加的,它呢许可的。有效的累加上限at most及是one,好,第二遍,请同学们一定要注意。许可证可用,将立即返回帕,意思就是有证这个帕就不阻拦你了,在此过程中就会把这张许可证给消费掉,否则要是你没有许可证,可能会什么帕克你给你阻止好,那么如果尚未提供许可,则致电安帕克获得许可,就说假设一个线程被帕被阻塞,被拦截在这儿了,那么就需要别人给你发通行证,或者安帕才能走人。那么注意这段括号里面的与S。不同许可证怎么着,不允许,不可以,不会积累,最多只有几个一个,这段话非常重要,后面我们会给大家演示啊。所以说there is at most one,最高上限累加的就是一只能有一个好。那么下面我们来看看他的主要方法。
02:14
那么对应着我们的API就这么全是静态的啊,大同小异。那么park。和带参数的park,那么这个呢,是传一个对象进去,主要是描述你被阻塞的原因,一般我们是用红色框框这两个,第一个park,第二个安帕,那么安帕这要传个参数,就这么点区别,那么所谓的阻塞它呢就是这么干的来。我们呢,先来看看啊。Lock support。帕看看源码。我点。哎呀,同学们发现按shift帕传了两个参数,False和0L,那么这个按C类。Park来,那么首先我们这说一下UN safe类呢,很重要,到后面我们讲CS的时候再给CS和原子操作类的时候再给大家详细展开,那么你现在看名词也知道UN safe类Java吧,里面一个底层C的一个类,非常非常的功能强大,但是。
03:16
名字是什么?容易造成内存泄露,它Una不推荐大家使用啊,所以大家了解就行。那么我们就明白了,所谓的lock port这个类调用park方法其实是底层掉了Una类的是吗?Park方法我一点,大家请看Una类里面的这个park方法是UNa.class。它呢,这个帕方法传两个参数,一个是布尔,一个是long型调的是一个什么native,所以说我们呢,继续往下翻。打开我们的open gdk源码,我们前面强调过,基本上产生一一对应UN safe.class那么对应者是不是我们的open gdk源码,这有个UN safe.java好,那么大家请看在这块帕克原来这传了个布尔型,是绝对的还是相对的,而这个是我们的是吗?它的这个持续时间默认大家可以看得出在这儿丢的是多少0L了,这个0I的意思就是说如果没有通行证,我就永远不放行,永远这个在这儿等待,OK,所以说大家呢,可以看一下底子的话,掉的native它传这么两个参数上面有对应的解释,OK,好,这就是我们所说的permit许可证默认没有是不可以放行的。所以一开始一旦你掉了帕方法,当前线程就会被阻塞,直到别的线程给当前线程发个permit通行证。
04:35
Park方法才会被唤醒,这个就是我们的什么调park的时候,其实而言底噪就调这个好,那么接下来。这是阻塞,有阻塞天生一对,会有唤醒按帕就是我们的什么。不再阻塞了,那么就是给你唤醒起来那么一样,大家请看,当我们调用sport类的。Support类的unpa方法,好,当然这啊需要传一个对象啊,或者是什么支取,那么暂时我们没有,我们先不传,但是我们可以先看到这个方法,只要这个线程不为难的时候,这按shift类安帕,所以说各位同学和刚才的什么一样,这块的话就是传一个对象,就相当于说你要给哪一个对象。
05:19
哪一个线程发许可证,所以说我们单调用这个以后会将线程许可证。Permit发放给括号里面这个线程。发许可证就会自动唤醒park线程之前阻塞中洛克support这个帕方法就会立刻返回,就是OK,收到你的这个发送过来的身份合法的这个通行证放行,所以说这两个方法就是我们常用的,那么下面我们将呢完成理论知识介绍以后,直接代码说。
我来说两句