1
我有一個任務,我需要實現一個鎖定機制。這是我迄今爲止所擁有的。基本上我需要鎖定方法來獲取鎖定,如果獲得鎖定則返回true,否則返回false。嘗試釋放鎖的解鎖方法,如果成功則返回true,否則返回false。這是一個自定義鎖定機制的好實現嗎?
這是一個正確的方式來實現這一點,或者可以做其他方式嗎?這些代碼可以添加哪些改進,或者可以通過哪些方式進行修改?
由於提前,
安德烈
private Long threadId;
private int lockHolds;
public synchronized boolean lock(long waitTime) throws DataStoreException {
if (lockHolds == 0) {
doLock(waitTime);
return true;
}
return false;
}
private synchronized void doLock(long waitTime) throws DataStoreException {
if (lockHolds == 0) {
lockHolds++;
this.threadId = Thread.currentThread().getId();
} else if (lockHolds > 0 && this.threadId == Thread.currentThread().getId()) {
lockHolds++;
} else {
try {
wait(waitTime);
lockHolds++;
this.threadId = Thread.currentThread().getId();
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
}
public synchronized boolean unlock() {
if (lockHolds == 0) {
return false;
}
lockHolds--;
if (lockHolds == 0) {
notify();
return true;
}
return false;
}
使用'synchronized'來實現_implement_鎖定是一種自我挫敗,不是嗎? –
工作代碼的評論比Codeoverview(codereview.stackexchange.com)更適合於比Stackoverflow。 –
爲什麼不使用ReentrantLock作爲您想要測試的鎖並刪除synchronized關鍵字。 – Slimu