如何让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秒后自动释放
我正在使用 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秒后自动释放