Phaser移相器

Phaser移相器

概念

移相器可以保证一个线程在其他线程都执行完毕之后再执行。比如下面的例子:

在这里插入图片描述

想要保证哪个线程最后执行就先让哪个线程调用arriveAndAwaitAdvance()方法。

解析上图过程:上图中当other线程里面调用arriveAndAwaitAdvance()方法的时候,移相器的容量值会减一,也就是会从2变成1,然后我们会判断一下移相器的值是否为0,如果不为0,线程就会阻塞等待其他线程运行,等到移相器的容量值变成了0,那么线程才会被唤醒。

Phaser移相器的构造器

如果你想要保证几个线程执行完毕,那么你就可以给Phaser移相器的参数设置成多少。比如说我们现在只有一个主线程,那么我们就可以给Phaser的构造器参数设置成1,如下图:

在这里插入图片描述

如果这个时候给构造器的参数设置成2,就表示必须要有两个线程执行完毕,如下图:

在这里插入图片描述

用移相器保证同时有两个线程执行完毕

在这里插入图片描述

上图中线程是不会阻塞的,但是如果把构造器里面的2换成3,就会发生阻塞了,如下图:

在这里插入图片描述

因为我们上面只有两个线程,移相器的容量值最多减到1,因此所有线程都会一直阻塞。

一个线程里面的普通代码和线程代码的执行顺序

如果线程方法里面上面是普通代码,下面是线程代码,那么在上面的普通代码执行完毕之前,一定不会执行下面的线程代码,如下图:

在这里插入图片描述

如果线程方法里面上面是线程代码,下面是普通代码,那么线程代码里面的东西和线程方法里面的普通代码,不一定谁会先执行,如下图:

在这里插入图片描述

register()方法的作用

register方法的作用是可以为移相器的容量里面的值加一,如下图:

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr-X~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值