1. ReentrantLock簡介
ReentrantLock(輕量級鎖)也可以叫對象鎖,可重入鎖,互斥鎖。synchronized重量級鎖,JDK前期的版本lock比synchronized更快,在JDK1.5之后synchronized引入了偏向鎖,輕量級鎖和重量級鎖。以致兩種鎖性能旗鼓相當,看個人喜歡,本文主要介紹一下怎么簡單使用lock。
2.ReentrantLock重入鎖lock()
每個線程都能獲取相應的lock鎖和釋放鎖unlock,這些鎖並不適用分布式環境。
package com.test;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Test{
public static Lock lock = new ReentrantLock();
public String test() throws Exception {
lock.lock();
try {
//TODO
} catch (Exception e) {
throw new Exception(e);
} finally {
lock.unlock();
}
return null;
}
}
3.ReentrantLock嘗試獲取鎖有返回值tryLock()
tryLock()方法是有返回值的,它表示用來嘗試獲取鎖,如果獲取成功,則返回true,如果獲取失敗(即鎖已被其他線程獲取),則返回false,也就說這個方法無論如何都會立即返回。在拿不到鎖時不會一直在那等待。
public class Test{
public static Lock lock = new ReentrantLock();
public String test() throws Exception {
if(lock.tryLock()){//嘗試獲取鎖
try {
//TODO
} catch (Exception e) {
throw new Exception(e);
} finally {
lock.unlock();
}
}else{
//不能獲取鎖
}
return null;
}
}
tryLock(long time, TimeUnit unit)方法和tryLock()方法是類似的,只不過區別在於這個方法在拿不到鎖時會等待一定的時間,在時間期限之內如果還拿不到鎖,就返回false。如果如果一開始拿到鎖或者在等待期間內拿到了鎖,則返回true。
