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移相器的主要内容,如果未能解决你的问题,请参考以下文章

Phaser 3 阵列碰撞

javajava 并发变成 阶段同步器 Phaser

从移相器画布获取高度和宽度

在移相器 3 中绘制移动线

移相器——移相器介绍

移相器的 TexturePacker 设置