package org.hsweb.concurrent.lock.support;
import org.hsweb.concurrent.lock.LockFactory;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* 默认的锁工程。用于提供JDK自带锁创建
* Created by zhouhao on 16-4-27.
*/
public class DefaultLockFactory implements LockFactory {
protected ConcurrentMap<String, ReadWriteLock> READ_WRITE_LOCK_BASE = new ConcurrentHashMap<>();
protected ConcurrentMap<String, Lock> LOCK_BASE = new ConcurrentHashMap<>();
@Override
public ReadWriteLock createReadWriteLock(String key) {
synchronized (READ_WRITE_LOCK_BASE) {
ReadWriteLock lock = READ_WRITE_LOCK_BASE.get(key);
if (lock == null) {
READ_WRITE_LOCK_BASE.put(key, lock = new ReentrantReadWriteLock());
}
return lock;
}
}
public Lock createLock(String key) {
synchronized (LOCK_BASE) {
Lock lock = LOCK_BASE.get(key);
if (lock == null) {
LOCK_BASE.put(key, lock = new ReentrantLock());
}
return lock;
}
}
}