作用:通过封装ReentrantReadWriteLock,可以通过try-with-resource的形式使用锁,简化代码
封装类:
import java.io.Closeable;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class AutoReadWriteLock {
public interface AutoLock extends Closeable {
// a close() that don't throw exception
public void close();
}
// ============================================================================
final private ReentrantReadWriteLock rwlock;
public AutoReadWriteLock() {
this(new ReentrantReadWriteLock());
}
public AutoReadWriteLock(ReentrantReadWriteLock rwlock) {
this.rwlock = rwlock;
}
public ReentrantReadWriteLock innerLock() {
return rwlock;
}
public AutoLock lockForRead() {
rwlock.readLock().lock();
return new AutoLock() {
@Override
public void close() {
rwlock.readLock().unlock();
}
};
}
public AutoLock lockForWrite() {
rwlock.writeLock().lock();
return new AutoLock() {
@Override
public void close() {
rwlock.writeLock().unlock();
}
};
}
}
2.使用类
public class Test{
private Map<String, String> test = new HashMap<>();
private AutoReadWriteLock testMapLock = new AutoReadWriteLock();
public void put(String str){
try (AutoLock lock = testMapLock.lockForWrite()){
test.put(str,str);
}
}
public String get(String str){
try (AutoLock lock = testMapLock.lockForRead()){
return test.get(str);
}
}
}