寫 Java 代碼至今,在應對可能衝突的共享資源操作時會盡量用 JDK 1.5 開始引入的併發鎖(如 Lock 的各類實現類, ReentrantLock 等) 進行鎖定,而不是原來的 synchronized
關鍵字強硬低性能鎖。
這裏是應用 JDK 1.5 的 Lock
的基本操作步驟
private Lock lock = new ReentrantLock();
private void operate() {
// 安全操作 ....
lock.lock();
try {
// 對共享資源的操作 ...
} finally {
lock.unlock();
}
}
如此,operate()
就是一個線程安全的方法,任何對它的調用都安排到了一個隊列裏等着。但有時候上鎖需要考慮更細的粒度,下面是一個演示案例,引出第一個問題