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永远不会被释放.
为了处理这种情况,我想要一个在特定时间后自动释放的信号量.
您应该使用 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秒后信号量自动释放。
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |