一般我们都比较喜欢使用synchronized关键字来实现同步,因为这样需要写的代码很少,而且出现错误的可能性还比较低。
所以特殊时候才会用显示创建锁,比如在使用synchronized时出现了异常,程序会抛出异常,但没有机会去执行清理操作了。这时就可以使用Lock配合finally进行系统维护。
使用显示的lock对象 ,有几种方式
lock()
tryLock()//会返回一个boolean值,表示是否取到锁
tryLock(long arg0, TimeUnit arg1) //案例 tryLock(2, TimeUnit.SECONDS) ;//取两秒的锁,两秒后没取到就放弃;也会返回boolean值
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class AttemptLocking {
//显示的使用Lock需要使用这个子类
private Lock lock = new ReentrantLock();
//没有超时机制的trylock
public void untimed() {
boolean captured = lock.tryLock();
try {
System.out.println("tryLock: " + captured);
} finally {
if(captured) {
lock.unlock();
System.out.println("unlock");
}
}
}
//使用超时机制的trylock
public void timed() {
boolean captu