使用tryLock时有两个情况,一般都是没拿到过就放弃线程,还有一种就是没拿到锁就继续获取锁,这里会把两种情况的示例都写下来
一:获取锁,没获取到锁的话放弃获取
public static void main(String[] args) {
final Lock lock=new ReentrantLock();
if (lock.tryLock()) {
try{
//成功获取锁 执行代码
}catch (Exception e){
e.getCause();
}finally {
//释放锁
lock.unlock();
}
}else{
//获取锁失败 执行失败的逻辑
}
}
二:获取锁,没获取到锁的话循环重新获取锁
public static void main(String[] args) {
//重试次数
int retryCount = 0;
// 最大重试次数
int maxRetries = 10;
// 每次重试前的休眠时间(毫秒)
int sleepTime = 500;
while (retryCount < maxRetries) {
if (lock.tryLock()) {
try{
//成功获取锁 执行代码
//退出循环
break;
}catch (Exception e){
e.getCause();
}finally {
//释放锁
lock.unlock();
}
}else{
retryCount++;
try {
// 休眠一段时间后再循环获取锁
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
// 处理中断
Thread.currentThread().interrupt();
}
}
}
}