如何使Redisson Semaphore自动释放

Swa*_*gat 5 semaphore amazon-web-services redis redisson

我正在使用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();
Run Code Online (Sandbox Code Playgroud)

我最后发布了Semaphore,但有时我的代码执行可能会因为特殊原因而停止,终止或停止服务器.然后收购Semaphore永远不会被释放.

为了处理这种情况,我想要一个在特定时间后自动释放的信号量.

Sag*_*khe 3

您应该使用 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);
Run Code Online (Sandbox Code Playgroud)

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