lock.lock(); 和lock.lock(100, TimeUnit.SECONDS);区别
时间: 2024-06-14 14:05:14 浏览: 110
lock.lock()是一种加锁方式,它会一直等待直到获取到锁为止。如果锁已经被其他线程获取,那么当前线程会被阻塞,直到锁被释放。
lock.lock(100, TimeUnit.SECONDS)也是一种加锁方式,它允许设置一个等待时间。如果在指定的时间内获取到了锁,那么当前线程会继续执行。如果超过了指定的时间仍然没有获取到锁,那么当前线程会放弃获取锁的操作,继续执行后续的代码。
下面是一个示例代码:
```java
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockExample {
private Lock lock = new ReentrantLock();
public void doSomething() {
try {
lock.lock(); // 加锁
// 执行一些需要保护的代码
} finally {
lock.unlock(); // 释放锁
}
}
public void doSomethingWithTimeout() {
try {
if (lock.tryLock(100, TimeUnit.SECONDS)) { // 尝试在100秒内获取锁
// 执行一些需要保护的代码
} else {
// 获取锁超时,执行其他操作
}
} catch (InterruptedException e) {
// 处理中断异常
} finally {
lock.unlock(); // 释放锁
}
}
}
```
阅读全文