Java 类java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock 实例源码
项目:alfresco-object-storage-connectors
文件:ObjectStorageContentStore.java
@Override
public ContentReader getReader(String contentUrl) {
if (logger.isDebugEnabled()) {
logger.debug(String.format("Content Reader for %s", contentUrl));
}
// Use pool of locks - which one is determined by a hash of the URL.
// This will stop the content from being read/cached multiple times from
// the backing store
// when it should only be read once - cached versions should be returned
// after that.
ReadLock readLock = readWriteLock(contentUrl).readLock();
readLock.lock();
try {
return this.objectStorageService.getReader(contentUrl);
} catch (IOException e) {
logger.error(e.getMessage(), e);
} finally {
readLock.unlock();
}
return null;
}
项目:alfresco-repository
文件:InMemoryCacheStatistics.java
@Override
public long count(String cacheName, OpType opType)
{
ReadLock readLock = getReadLock(cacheName);
readLock.lock();
try
{
Map<OpType, OperationStats> cacheStats = cacheToStatsMap.get(cacheName);
if (cacheStats == null)
{
throw new NoStatsForCache(cacheName);
}
OperationStats opStats = cacheStats.get(opType);
return opStats.getCount();
}
finally
{
readLock.unlock();
}
}
项目:alfresco-repository
文件:InMemoryCacheStatistics.java
@Override
public double meanTime(String cacheName, OpType opType)
{
ReadLock readLock = getReadLock(cacheName);
readLock.lock();
try
{
Map<OpType, OperationStats> cacheStats = cacheToStatsMap.get(cacheName);
if (cacheStats == null)
{
throw new NoStatsForCache(cacheName);
}
OperationStats opStats = cacheStats.get(opType);
return opStats.meanTime();
}
finally
{
readLock.unlock();
}
}
项目:alfresco-repository
文件:InMemoryCacheStatistics.java
@Override
public double hitMissRatio(String cacheName)
{
ReadLock readLock = getReadLock(cacheName);
readLock.lock();
try
{
Map<OpType, OperationStats> cacheStats = cacheToStatsMap.get(cacheName);
if (cacheStats == null)
{
throw new NoStatsForCache(cacheName);
}
long hits = cacheStats.get(OpType.GET_HIT).getCount();
long misses = cacheStats.get(OpType.GET_MISS).getCount();
return (double)hits / (hits+misses);
}
finally
{
readLock.unlock();
}
}
项目:alfresco-repository
文件:InMemoryCacheStatistics.java
@Override
public long numGets(String cacheName)
{
ReadLock readLock = getReadLock(cacheName);
readLock.lock();
try
{
Map<OpType, OperationStats> cacheStats = cacheToStatsMap.get(cacheName);
if (cacheStats == null)
{
throw new NoStatsForCache(cacheName);
}
long hits = cacheStats.get(OpType.GET_HIT).getCount();
long misses = cacheStats.get(OpType.GET_MISS).getCount();
return hits+misses;
}
finally
{
readLock.unlock();
}
}
项目:alfresco-repository
文件:InMemoryCacheStatistics.java
@Override
public Map<OpType, OperationStats> allStats(String cacheName)
{
ReadLock readLock = getReadLock(cacheName);
readLock.lock();
try
{
Map<OpType, OperationStats> cacheStats = cacheToStatsMap.get(cacheName);
if (cacheStats == null)
{
throw new NoStatsForCache(cacheName);
}
return new HashMap<>(cacheStats);
}
finally
{
readLock.unlock();
}
}
项目:k8s-proxy
文件:K8sReverseProxy.java
@RequestMapping("/get_token")
@ResponseBody
public TokenInfo getTokens(HttpServletRequest request, HttpServletResponse response)
throws ClientProtocolException,
IOException
{
if (googleToken == null || googleToken.getIdToken() == null || googleToken.getRefreshToken() == null) {
initialRedirect = request.getRequestURI().toString();
response.sendRedirect(googleTokenRetriever.getAuthorizeUrl());
return null;
}
ReadLock readLock = lock.readLock();
try {
readLock.lock();
return new TokenInfo().withIdToken(googleToken.getIdToken())
.withRefreshToken(googleToken.getRefreshToken());
} finally {
readLock.unlock();
}
}
项目:cloud-bigtable-client
文件:BigtableBufferedMutator.java
@Override
public void mutate(List<? extends Mutation> mutations) throws IOException {
// Ensure that close() or flush() aren't current being called.
ReadLock lock = mutationLock.readLock();
lock.lock();
try {
if (closed) {
throw new IllegalStateException("Cannot mutate when the BufferedMutator is closed.");
}
handleExceptions();
for (Mutation mutation : mutations) {
doMutation(mutation);
}
} finally {
lock.unlock();
}
}
项目:community-edition-old
文件:InMemoryCacheStatistics.java
@Override
public long count(String cacheName, OpType opType)
{
ReadLock readLock = getReadLock(cacheName);
readLock.lock();
try
{
Map<OpType, OperationStats> cacheStats = cacheToStatsMap.get(cacheName);
if (cacheStats == null)
{
throw new NoStatsForCache(cacheName);
}
OperationStats opStats = cacheStats.get(opType);
return opStats.getCount();
}
finally
{
readLock.unlock();
}
}
项目:community-edition-old
文件:InMemoryCacheStatistics.java
@Override
public double meanTime(String cacheName, OpType opType)
{
ReadLock readLock = getReadLock(cacheName);
readLock.lock();
try
{
Map<OpType, OperationStats> cacheStats = cacheToStatsMap.get(cacheName);
if (cacheStats == null)
{
throw new NoStatsForCache(cacheName);
}
OperationStats opStats = cacheStats.get(opType);
return opStats.meanTime();
}
finally
{
readLock.unlock();
}
}
项目:community-edition-old
文件:InMemoryCacheStatistics.java
@Override
public double hitMissRatio(String cacheName)
{
ReadLock readLock = getReadLock(cacheName);
readLock.lock();
try
{
Map<OpType, OperationStats> cacheStats = cacheToStatsMap.get(cacheName);
if (cacheStats == null)
{
throw new NoStatsForCache(cacheName);
}
long hits = cacheStats.get(OpType.GET_HIT).getCount();
long misses = cacheStats.get(OpType.GET_MISS).getCount();
return (double)hits / (hits+misses);
}
finally
{
readLock.unlock();
}
}
项目:community-edition-old
文件:InMemoryCacheStatistics.java
@Override
public long numGets(String cacheName)
{
ReadLock readLock = getReadLock(cacheName);
readLock.lock();
try
{
Map<OpType, OperationStats> cacheStats = cacheToStatsMap.get(cacheName);
if (cacheStats == null)
{
throw new NoStatsForCache(cacheName);
}
long hits = cacheStats.get(OpType.GET_HIT).getCount();
long misses = cacheStats.get(OpType.GET_MISS).getCount();
return hits+misses;
}
finally
{
readLock.unlock();
}
}
项目:community-edition-old
文件:InMemoryCacheStatistics.java
@Override
public Map<OpType, OperationStats> allStats(String cacheName)
{
ReadLock readLock = getReadLock(cacheName);
readLock.lock();
try
{
Map<OpType, OperationStats> cacheStats = cacheToStatsMap.get(cacheName);
if (cacheStats == null)
{
throw new NoStatsForCache(cacheName);
}
return new HashMap<>(cacheStats);
}
finally
{
readLock.unlock();
}
}
项目:bigbase
文件:CacheScanner.java
/**
* Instantiates a new scanner.
*
* @param cache the cache
* @param scanNumber the scan number
* @param totalScanners the total scanners
*/
public CacheScanner(OffHeapCache cache, int startIndex, int stopIndex, int dummy) {
this.mCache = cache;
this.mStride = OffHeapCache.getLockStripesCount();
this.mLocks = mCache.getLocks();
mInternalBuffer = new long[BUFFER_SIZE];
this.mMemPointer = mCache.getMemPointer();
this.mStartIndex = startIndex;
this.mEndIndex = stopIndex;
this.mCurrentIndex = mStartIndex;
SpinReadWriteLock lock = mCache.getLock(mCurrentIndex);
ReadLock readLock = lock.readLock();
readLock.lock();
try {
// initialize current pointer
mCurrentPtr = IOUtils.getLong(mMemPointer, mCurrentIndex * 8);
} finally {
readLock.unlock();
}
}
项目:bigbase
文件:CacheScanner.java
/**
* Instantiates a new scanner.
*
* @param cache the cache
* @param scanNumber the scan number
* @param totalScanners the total scanners
*/
CacheScanner(OffHeapCache cache, int scanNumber, int totalScanners) {
this.mCache = cache;
this.mScannerNumber = scanNumber;
this.mTotalScanners = totalScanners;
mInternalBuffer = new long[BUFFER_SIZE];
this.mStride = OffHeapCache.getLockStripesCount();
this.mLocks = mCache.getLocks();
//this.mBuffer = mCache.getOffHeapBuffer();
this.mMemPointer = mCache.getMemPointer();
calculateIndexRange();
this.mCurrentIndex = mStartIndex;
SpinReadWriteLock lock = mCache.getLock(mCurrentIndex);
ReadLock readLock = lock.readLock();
readLock.lock();
try {
// initialize current pointer
mCurrentPtr = IOUtils.getLong(mMemPointer, mCurrentIndex * 8);
} finally {
readLock.unlock();
}
}
项目:bigbase
文件:CacheScanner.java
CacheScanner(OffHeapCache cache, int scanNumber, int totalScanners, boolean needLock) {
this.mCache = cache;
this.mScannerNumber = scanNumber;
this.mTotalScanners = totalScanners;
mInternalBuffer = new long[BUFFER_SIZE];
this.mStride = OffHeapCache.getLockStripesCount();
this.mLocks = mCache.getLocks();
//this.mBuffer = mCache.getOffHeapBuffer();
this.mMemPointer = mCache.getMemPointer();
calculateIndexRange();
this.mCurrentIndex = mStartIndex;
SpinReadWriteLock lock = mCache.getLock(mCurrentIndex);
this.needLock = needLock;
ReadLock readLock = lock.readLock();
readLock.lock();
try {
// initialize current pointer
mCurrentPtr = IOUtils.getLong(mMemPointer, mCurrentIndex * 8);
} finally {
readLock.unlock();
}
}
项目:bigbase
文件:OffHeapCache.java
/**
* Execute operation without in-memory data update.
*
* @param key the key
* @param op the op
* @return the for update
* @throws NativeMemoryException the j emalloc exception
* @throws IOException Signals that an I/O exception has occurred.
*/
public boolean execute(ByteBuffer key, Command<?> op) throws NativeMemoryException, IOException
{
SpinReadWriteLock lock = getLockForKey(key);
ReadLock readLock = null;
if(lock != null){
readLock = lock.readLock();
readLock.lock();
}
try{
return op.execute(key, this);
}finally{
if(readLock != null) readLock.unlock();
}
}
项目:bigbase
文件:OffHeapCache.java
/**
* Put if absent.
*
* @param key the key
* @param value the value
* @param expire the expire
* @return the object
* @throws NativeMemoryException the native memory exception
* @throws IOException Signals that an I/O exception has occurred.
*/
private Object putIfAbsent(Object key, Object value, int expire) throws NativeMemoryException, IOException {
SpinReadWriteLock lock = getLockForKey(key);
ReadLock readLock = null;
if(lock != null){
readLock = lock.readLock();
readLock.lock();
}
try{
Object val = get(key);
if(val != null){
return val;
} else{
put(key, value, expire);
}
}finally{
if(readLock != null) readLock.unlock();
}
return null;
}
项目:relational-entity-db
文件:EntityDB.java
Set<Long> queryKeys(Filter filter) {
if (closed) {
throw new IllegalStateException("This db is closed.");
}
if (filter == null) {
throw new NullPointerException("The filter parameter can not be null.");
}
ReadLock lock = readWriteLock.readLock();
lock.lock();
try {
return rdb.queryKeys(filter);
} finally {
lock.unlock();
}
}
项目:relational-entity-db
文件:EntityDB.java
List<Entity> query(Filter filter) {
if (closed) {
throw new IllegalStateException("This db is closed.");
}
if (filter == null) {
throw new NullPointerException("The filter parameter can not be null.");
}
ReadLock lock = readWriteLock.readLock();
lock.lock();
try {
return rdb.query(filter);
} finally {
lock.unlock();
}
}
项目:relational-entity-db
文件:EntityDB.java
Entity querySingleton(Filter filter) {
if (closed) {
throw new IllegalStateException("This db is closed.");
}
if (filter == null) {
throw new NullPointerException("The filter parameter can not be null.");
}
ReadLock lock = readWriteLock.readLock();
lock.lock();
try {
return rdb.querySingleton(filter);
} finally {
lock.unlock();
}
}
项目:relational-entity-db
文件:EntityDB.java
Entity queryFirst(Filter filter) {
if (closed) {
throw new IllegalStateException("This db is closed.");
}
if (filter == null) {
throw new NullPointerException("The filter parameter can not be null.");
}
ReadLock lock = readWriteLock.readLock();
lock.lock();
try {
return rdb.queryFirst(filter);
} finally {
lock.unlock();
}
}
项目:fabric8poc
文件:ProfileRegistry.java
LockHandle aquireReadLock(VersionIdentity version) {
final ReadLock readLock = readWriteLock.readLock();
boolean success;
try {
success = readLock.tryLock() || readLock.tryLock(10, TimeUnit.SECONDS);
} catch (InterruptedException ex) {
success = false;
}
IllegalStateAssertion.assertTrue(success, "Cannot obtain profile read lock in time");
return new LockHandle() {
@Override
public void unlock() {
readLock.unlock();
}
};
}
项目:fabric8poc
文件:AgentTopologyMBean.java
private LockHandle aquireReadLock() {
final ReadLock readLock = readWriteLock.readLock();
boolean success;
try {
success = readLock.tryLock() || readLock.tryLock(100, TimeUnit.MILLISECONDS);
} catch (InterruptedException ex) {
success = false;
}
IllegalStateAssertion.assertTrue(success, "Cannot obtain topology read lock in time");
return new LockHandle() {
@Override
public void unlock() {
readLock.unlock();
}
};
}
项目:osgi-testrunner
文件:AbstractShutdownBlocker.java
/**
* Notifies all block listeners about either blocking or not blocking.
*
* @param block
* Whether the event is blocking or not.
*/
private void notifyListeners(final boolean block) {
ReadLock readLock = blockListenersRWLock.readLock();
readLock.lock();
if (blocking != block) {
blocking = block;
for (ShutdownBlockListener blockListener : blockListeners) {
if (block) {
blockListener.block();
} else {
blockListener.unblock();
}
}
}
readLock.unlock();
}
项目:eventdispatcher
文件:EventDispatcherImpl.java
/**
* Calling a listener with an event. In case there is any exception or a timeout the listener will be removed from
* the listeners collection and no more events will be passed.
*
* @param listenerKey
* The reference of the listener OSGi service.
* @param listener
* The listener object.
* @param event
* The event.
*/
private void callListener(final LK listenerKey, final ListenerData<L> listenerData, final E event) {
ReentrantReadWriteLock listenerLocker = listenerData.getLocker();
ReadLock listenerReadLock = listenerLocker.readLock();
listenerReadLock.lock();
try {
eventUtil.callListener(listenerData.getListener(), event);
} catch (Throwable e) {
try {
exceptionHandler.handleException(listenerKey, event, e);
} catch (RuntimeException handlerE) {
e.addSuppressed(handlerE);
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
sw.write("Error during calling exception handler after recieving an exception from listener '"
+ listenerKey.toString() + "' with the event: " + event.toString() + "\n");
e.printStackTrace(pw);
System.err.println(sw.toString());
}
}
listenerReadLock.unlock();
}
项目:EntityDB
文件:EntityDB.java
List<Long> queryKeys(Filter filter) {
if (closed) {
throw new IllegalStateException("This db is closed.");
}
if (filter == null) {
throw new NullPointerException("The filter parameter can not be null.");
}
ReadLock lock = readWriteLock.readLock();
lock.lock();
try {
return queryIndex(filter.getKind(), filter.getFilterItem());
} finally {
lock.unlock();
}
}
项目:alfresco-object-storage-connectors
文件:ObjectStorageContentStore.java
@Override
public boolean delete(String contentUrl) {
if (logger.isDebugEnabled()) {
logger.debug(String.format("Delete %s", contentUrl));
}
ReentrantReadWriteLock readWriteLock = readWriteLock(contentUrl);
ReadLock readLock = readWriteLock.readLock();
readLock.lock();
try {
return this.objectStorageService.delete(contentUrl);
} finally {
readLock.unlock();
}
}
项目:alfresco-repository
文件:CachingContentStore.java
/**
* {@inheritDoc}
* <p>
* This store handles the {@link FileContentStore#SPOOF_PROTOCOL} so that underlying stores do not need
* to implement anything <a href="https://issues.alfresco.com/jira/browse/ACE-4516">related to spoofing</a>.
*/
@Override
public ContentReader getReader(String contentUrl)
{
// Handle the spoofed URL
if (contentUrl.startsWith(FileContentStore.SPOOF_PROTOCOL))
{
return new SpoofedTextContentReader(contentUrl);
}
// Use pool of locks - which one is determined by a hash of the URL.
// This will stop the content from being read/cached multiple times from the backing store
// when it should only be read once - cached versions should be returned after that.
ReadLock readLock = readWriteLock(contentUrl).readLock();
readLock.lock();
try
{
if (cache.contains(contentUrl))
{
return cache.getReader(contentUrl);
}
}
catch(CacheMissException e)
{
// Fall through to cacheAndRead(url);
}
finally
{
readLock.unlock();
}
return cacheAndRead(contentUrl);
}
项目:fuck_zookeeper
文件:ZKDatabase.java
public synchronized LinkedList<Proposal> getCommittedLog() {
ReadLock rl = logLock.readLock();
// only make a copy if this thread isn't already holding a lock
if(logLock.getReadHoldCount() <=0) {
try {
rl.lock();
return new LinkedList<Proposal>(this.committedLog);
} finally {
rl.unlock();
}
}
return this.committedLog;
}
项目:https-github.com-apache-zookeeper
文件:ZKDatabase.java
public synchronized List<Proposal> getCommittedLog() {
ReadLock rl = logLock.readLock();
// only make a copy if this thread isn't already holding a lock
if(logLock.getReadHoldCount() <=0) {
try {
rl.lock();
return new LinkedList<Proposal>(this.committedLog);
} finally {
rl.unlock();
}
}
return this.committedLog;
}
项目:ZooKeeper
文件:ZKDatabase.java
public synchronized LinkedList<Proposal> getCommittedLog() {
ReadLock rl = logLock.readLock();
// only make a copy if this thread isn't already holding a lock
if(logLock.getReadHoldCount() <=0) {
try {
rl.lock();
return new LinkedList<Proposal>(this.committedLog);
} finally {
rl.unlock();
}
}
return this.committedLog;
}
项目:diorite-configs-java8
文件:ActionsRegistry.java
@Nullable
public static Pair<ConfigPropertyAction, ActionMatcherResult> findMethod(Method method, Predicate<String> propertyNameChecker)
{
Pair<ConfigPropertyAction, ActionMatcherResult> lastMatching = null;
ReadLock readLock = lock.readLock();
try
{
readLock.lock();
for (ConfigPropertyActionEntry actionEntry : actions)
{
ConfigPropertyAction action = actionEntry.action;
ActionMatcherResult actionMatcherResult = action.matchesAction(method);
if (actionMatcherResult.isMatching())
{
actionMatcherResult.setValidatedName(action.declaresProperty() || propertyNameChecker.test(actionMatcherResult.getPropertyName()));
lastMatching = new ImmutablePair<>(action, actionMatcherResult);
if (actionMatcherResult.isValidatedName())
{
return lastMatching;
}
}
}
}
finally
{
readLock.unlock();
}
return lastMatching;
}
项目:BUbiNG
文件:ConcurrentCountingMap.java
/** Gets the value of the counter associated with a given key.
*
* @param array a byte array.
* @param offset the first valid byte in {@code array}.
* @param length the number of valid elements in {@code array}.
* @return the current value of the counter associated with the specified key.
*/
public int get(final byte[] array, final int offset, final int length) {
final long hash = MurmurHash3.hash(array, offset, length);
final ReadLock readLock = lock[(int)(hash >>> shift)].readLock();
try {
readLock.lock();
return stripe[(int)(hash >>> shift)].get(array, offset, length, hash);
}
finally {
readLock.unlock();
}
}
项目:StreamProcessingInfrastructure
文件:ZKDatabase.java
public synchronized LinkedList<Proposal> getCommittedLog() {
ReadLock rl = logLock.readLock();
// only make a copy if this thread isn't already holding a lock
if(logLock.getReadHoldCount() <=0) {
try {
rl.lock();
return new LinkedList<Proposal>(this.committedLog);
} finally {
rl.unlock();
}
}
return this.committedLog;
}
项目:metasfresh-webui-api
文件:Document.java
public IAutoCloseable lockForReading()
{
// assume _lock is not null
final ReadLock readLock = _lock.readLock();
logger.debug("Acquiring read lock for {}: {}", this, readLock);
readLock.lock();
logger.debug("Acquired read lock for {}: {}", this, readLock);
return () -> {
readLock.unlock();
logger.debug("Released read lock for {}: {}", this, readLock);
};
}
项目:metasfresh-webui-api
文件:ADProcessInstanceController.java
final IAutoCloseable lockForReading()
{
final ReadLock readLock = readwriteLock.readLock();
logger.debug("Acquiring read lock for {}: {}", this, readLock);
readLock.lock();
logger.debug("Acquired read lock for {}: {}", this, readLock);
return () -> {
readLock.unlock();
logger.debug("Released read lock for {}: {}", this, readLock);
};
}
项目:metasfresh-webui-api
文件:ASIDocument.java
IAutoCloseable lockForReading()
{
// assume _lock is not null
final ReadLock readLock = _lock.readLock();
logger.debug("Acquiring read lock for {}: {}", this, readLock);
readLock.lock();
logger.debug("Acquired read lock for {}: {}", this, readLock);
return () -> {
readLock.unlock();
logger.debug("Released read lock for {}: {}", this, readLock);
};
}
项目:metasfresh-webui-api
文件:QuickInput.java
public IAutoCloseable lockForReading()
{
final ReadLock readLock = readwriteLock.readLock();
logger.debug("Acquiring read lock for {}: {}", this, readLock);
readLock.lock();
logger.debug("Acquired read lock for {}: {}", this, readLock);
return () -> {
readLock.unlock();
logger.debug("Released read lock for {}: {}", this, readLock);
};
}
项目:bigstreams
文件:ZKDatabase.java
public synchronized LinkedList<Proposal> getCommittedLog() {
ReadLock rl = logLock.readLock();
// only make a copy if this thread isn't already holding a lock
if(logLock.getReadHoldCount() <=0) {
try {
rl.lock();
return new LinkedList<Proposal>(this.committedLog);
} finally {
rl.unlock();
}
}
return this.committedLog;
}