如何让Redisson Semaphore自动释放

How to make Redisson Semaphore auto release

我正在使用 RSemaphore 来维护特定的计数。请看下面:-

RSemaphore sem = redisson.getSemaphore("custid=10");
sem.trySetPermits(10);
  try {
     sem.acquire();
  } catch (InterruptedException e) {
     e.printStackTrace();
  }

  System.out.println(Thread.currentThread().getName() + ": Acquired permit");

  try {
     Thread.sleep(60000);
  } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
  }

  System.out.println(Thread.currentThread().getName() + ": Releasing permit");
  sem.release();

我将在最后释放信号量,但有时我的代码执行可能会停止、终止或由于特定原因我停止了服务器。然后acquire Semaphore永远不会被释放。

要处理这种情况我想要信号量,它会在特定时间后自动释放。

您应该如下使用 PermitExpirableSemaphore:

RPermitExpirableSemaphore semaphore =redisson.getPermitExpirableSemaphore("mySemaphore"); 

// acquire permit with lease time = 2 seconds 
String permitId = semaphore.acquire(2, TimeUnit.SECONDS);
// ... Do something 
semaphore.release(permitId);

信号量默认2秒后自动释放