Phaser移相器
Posted 杀手不太冷!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Phaser移相器相关的知识,希望对你有一定的参考价值。
Phaser移相器
概念
移相器可以保证一个线程在其他线程都执行完毕之后再执行。比如下面的例子:
想要保证哪个线程最后执行就先让哪个线程调用arriveAndAwaitAdvance()方法。
解析上图过程:上图中当other线程里面调用arriveAndAwaitAdvance()方法的时候,移相器的容量值会减一,也就是会从2变成1,然后我们会判断一下移相器的值是否为0,如果不为0,线程就会阻塞等待其他线程运行,等到移相器的容量值变成了0,那么线程才会被唤醒。
Phaser移相器的构造器
如果你想要保证几个线程执行完毕,那么你就可以给Phaser移相器的参数设置成多少。比如说我们现在只有一个主线程,那么我们就可以给Phaser的构造器参数设置成1,如下图:
如果这个时候给构造器的参数设置成2,就表示必须要有两个线程执行完毕,如下图:
用移相器保证同时有两个线程执行完毕
上图中线程是不会阻塞的,但是如果把构造器里面的2换成3,就会发生阻塞了,如下图:
因为我们上面只有两个线程,移相器的容量值最多减到1,因此所有线程都会一直阻塞。
一个线程里面的普通代码和线程代码的执行顺序
如果线程方法里面上面是普通代码,下面是线程代码,那么在上面的普通代码执行完毕之前,一定不会执行下面的线程代码,如下图:
如果线程方法里面上面是线程代码,下面是普通代码,那么线程代码里面的东西和线程方法里面的普通代码,不一定谁会先执行,如下图:
register()方法的作用
register方法的作用是可以为移相器的容量里面的值加一,如下图:
以上是关于Phaser移相器的主要内容,如果未能解决你的问题,请参考以下文章