자바 공유 잠 금 실현

1456 단어 자바 기반

import java.util.Map;

public class ShareLock {

private static ShareLock instance = null;

private ShareLock() {

}

private Map lockpool = new java.util.concurrent.ConcurrentHashMap(
1024);

public static ShareLock getInstance() {
if (instance == null) {
synchronized (ShareLock.class) {
instance = new ShareLock();
}
}
return instance;
}

/**
* key, byte[]
*/
public byte[] getShareLock(String key) {
byte[] lock = null;
if (lockpool.containsKey(key)) {
lock = lockpool.get(key);
} else {
lock = new byte[0];
lockpool.put(key, lock);
}
return lock;
}

public void removeShareLock(String key) {
lockpool.remove(key);
}

}


호출 할 때 이렇게.

synchronized (ShareLock.getInstance().getShareLock("xxx")) {
try {
... } finally {
ShareLock.getInstance().removeShareLock("xxx");
}
}

같은 key, 예 를 들 어 id 와 같은 대상 이 메모리 에 있 는 모든 존재 라면 같은 byte 배열 인 스 턴 스 를 되 돌려 줍 니 다 (왜 byte 배열 입 니까? 모든 대상 에서 그의 비용 이 가장 적 기 때 문 입 니 다).이 byte 배열 의 인 스 턴 스 잠 금 을 통 해 이 그룹 을 잠 그 는 대상 에 도달 합 니 다!본질은 여전히 인 스 턴 스 잠 금 입 니 다. 하나의 인 스 턴 스 가 목표 대상 에 대응 하 는 여러 인 스 턴 스 에 불과 합 니 다!

좋은 웹페이지 즐겨찾기