当前位置: 代码迷 >> 综合 >> Semaphore 妙用之——非阻塞等待
  详细解决方案

Semaphore 妙用之——非阻塞等待

热度:65   发布时间:2023-12-25 08:56:28.0
  1. 关于Semaphore: https://zhuanlan.zhihu.com/p/98593407
  2. 记录一种实用场景:在规定时间内监控广播后取消注册广播
// 1. 创建一个信号量
final Semaphore semaphore = new Semaphore(0);// 2.创建一个广播并注册
BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver() {
    @Overridepublic void onReceive(Context context, Intent intent) {
    // 业务逻辑.....// 释放信号量semaphore.release();}
}
context.registerReceiver(myBroadcastReceiver, "test");//3. 规定等待时间(3秒)try {
    semaphore.tryAcquire(3000, TimeUnit.MILLISECONDS);} catch (InterruptedException e) {
    Log.e(TAG, e);}// 4. 取消注册广播
context.unregisterReceiver(myBroadcastReceiver);
  1. 这样就可以达到一个目的:在3秒内如果接收到广播,信号量会释放,然后取消注册广播;3秒内没有接收到广播,则触发信号量超时,取消注册广播。
  相关解决方案