當前位置: 首頁>>代碼示例>>Java>>正文


Java GuardedBy類代碼示例

本文整理匯總了Java中javax.annotation.concurrent.GuardedBy的典型用法代碼示例。如果您正苦於以下問題:Java GuardedBy類的具體用法?Java GuardedBy怎麽用?Java GuardedBy使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。


GuardedBy類屬於javax.annotation.concurrent包,在下文中一共展示了GuardedBy類的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Java代碼示例。

示例1: updateFileCacheSizeLimit

import javax.annotation.concurrent.GuardedBy; //導入依賴的package包/類
/**
 * Helper method that sets the cache size limit to be either a high, or a low limit.
 * If there is not enough free space to satisfy the high limit, it is set to the low limit.
 */
@GuardedBy("mLock")
private void updateFileCacheSizeLimit() {
  // Test if mCacheSizeLimit can be set to the high limit
  boolean isAvailableSpaceLowerThanHighLimit;
  StatFsHelper.StorageType storageType =
      mStorage.isExternal()
          ? StatFsHelper.StorageType.EXTERNAL
          : StatFsHelper.StorageType.INTERNAL;
  isAvailableSpaceLowerThanHighLimit =
      mStatFsHelper.testLowDiskSpace(
          storageType,
          mDefaultCacheSizeLimit - mCacheStats.getSize());
  if (isAvailableSpaceLowerThanHighLimit) {
    mCacheSizeLimit = mLowDiskSpaceCacheSizeLimit;
  } else {
    mCacheSizeLimit = mDefaultCacheSizeLimit;
  }
}
 
開發者ID:weiwenqiang,項目名稱:GitHub,代碼行數:23,代碼來源:DiskStorageCache.java

示例2: removeFromChain

import javax.annotation.concurrent.GuardedBy; //導入依賴的package包/類
/**
 * Removes an entry from within a table. All entries following the removed node can stay, but
 * all preceding ones need to be cloned.
 *
 * <p>This method does not decrement count for the removed entry, but does decrement count for
 * all partially collected entries which are skipped. As such callers which are modifying count
 * must re-read it after calling removeFromChain.
 *
 * @param first the first entry of the table
 * @param entry the entry being removed from the table
 * @return the new first entry for the table
 */
@GuardedBy("this")
E removeFromChain(E first, E entry) {
  int newCount = count;
  E newFirst = entry.getNext();
  for (E e = first; e != entry; e = e.getNext()) {
    E next = copyEntry(e, newFirst);
    if (next != null) {
      newFirst = next;
    } else {
      newCount--;
    }
  }
  this.count = newCount;
  return newFirst;
}
 
開發者ID:zugzug90,項目名稱:guava-mock,代碼行數:28,代碼來源:MapMakerInternalMap.java

示例3: createHistoryProxy

import javax.annotation.concurrent.GuardedBy; //導入依賴的package包/類
/**
 * Create a new history proxy for a given shard.
 *
 * @throws InversibleLockException if the shard is being reconnected
 */
@GuardedBy("lock")
private ProxyHistory createHistoryProxy(final Long shard) {
    final AbstractClientConnection<ShardBackendInfo> connection = client.getConnection(shard);
    final LocalHistoryIdentifier proxyId = new LocalHistoryIdentifier(identifier.getClientId(),
        identifier.getHistoryId(), shard);
    LOG.debug("Created proxyId {} for history {} shard {}", proxyId, identifier, shard);

    final ProxyHistory ret = createHistoryProxy(proxyId, connection);

    // Request creation of the history, if it is not the single history
    if (ret.getIdentifier().getHistoryId() != 0) {
        connection.sendRequest(new CreateLocalHistoryRequest(ret.getIdentifier(), connection.localActor()),
            this::createHistoryCallback);
    }
    return ret;
}
 
開發者ID:hashsdn,項目名稱:hashsdn-controller,代碼行數:22,代碼來源:AbstractClientHistory.java

示例4: recordWrite

import javax.annotation.concurrent.GuardedBy; //導入依賴的package包/類
/**
 * Updates eviction metadata that {@code entry} was just written. This currently amounts to
 * adding {@code entry} to relevant eviction lists.
 */
@GuardedBy("this")
void recordWrite(ReferenceEntry<K, V> entry, int weight, long now) {
  // we are already under lock, so drain the recency queue immediately
  drainRecencyQueue();
  totalWeight += weight;

  if (map.recordsAccess()) {
    entry.setAccessTime(now);
  }
  if (map.recordsWrite()) {
    entry.setWriteTime(now);
  }
  accessQueue.add(entry);
  writeQueue.add(entry);
}
 
開發者ID:zugzug90,項目名稱:guava-mock,代碼行數:20,代碼來源:LocalCache.java

示例5: processTransaction

import javax.annotation.concurrent.GuardedBy; //導入依賴的package包/類
/**
 * Process a ready transaction. The caller needs to ensure that
 * each transaction is seen only once by this method.
 *
 * @param tx Transaction which needs processing.
 */
@GuardedBy("this")
private void processTransaction(@Nonnull final PingPongTransaction tx) {
    if (failed) {
        LOG.debug("Cancelling transaction {}", tx);
        tx.getTransaction().cancel();
        return;
    }

    LOG.debug("Submitting transaction {}", tx);
    if (!INFLIGHT_UPDATER.compareAndSet(this, null, tx)) {
        LOG.warn("Submitting transaction {} while {} is still running", tx, inflightTx);
    }

    Futures.addCallback(tx.getTransaction().submit(), new FutureCallback<Void>() {
        @Override
        public void onSuccess(final Void result) {
            transactionSuccessful(tx, result);
        }

        @Override
        public void onFailure(final Throwable t) {
            transactionFailed(tx, t);
        }
    }, MoreExecutors.directExecutor());
}
 
開發者ID:hashsdn,項目名稱:hashsdn-controller,代碼行數:32,代碼來源:PingPongTransactionChain.java

示例6: evictEntries

import javax.annotation.concurrent.GuardedBy; //導入依賴的package包/類
/**
 * Performs eviction if the segment is over capacity. Avoids flushing the entire cache if the
 * newest entry exceeds the maximum weight all on its own.
 *
 * @param newest the most recently added entry
 */
@GuardedBy("this")
void evictEntries(ReferenceEntry<K, V> newest) {
  if (!map.evictsBySize()) {
    return;
  }

  drainRecencyQueue();

  // If the newest entry by itself is too heavy for the segment, don't bother evicting
  // anything else, just that
  if (newest.getValueReference().getWeight() > maxSegmentWeight) {
    if (!removeEntry(newest, newest.getHash(), RemovalCause.SIZE)) {
      throw new AssertionError();
    }
  }

  while (totalWeight > maxSegmentWeight) {
    ReferenceEntry<K, V> e = getNextEvictable();
    if (!removeEntry(e, e.getHash(), RemovalCause.SIZE)) {
      throw new AssertionError();
    }
  }
}
 
開發者ID:zugzug90,項目名稱:guava-mock,代碼行數:30,代碼來源:LocalCache.java

示例7: removeValueFromChain

import javax.annotation.concurrent.GuardedBy; //導入依賴的package包/類
@GuardedBy("this")
@Nullable
ReferenceEntry<K, V> removeValueFromChain(
    ReferenceEntry<K, V> first,
    ReferenceEntry<K, V> entry,
    @Nullable K key,
    int hash,
    V value,
    ValueReference<K, V> valueReference,
    RemovalCause cause) {
  enqueueNotification(key, hash, value, valueReference.getWeight(), cause);
  writeQueue.remove(entry);
  accessQueue.remove(entry);

  if (valueReference.isLoading()) {
    valueReference.notifyNewValue(null);
    return first;
  } else {
    return removeEntryFromChain(first, entry);
  }
}
 
開發者ID:zugzug90,項目名稱:guava-mock,代碼行數:22,代碼來源:LocalCache.java

示例8: endWaitingFor

import javax.annotation.concurrent.GuardedBy; //導入依賴的package包/類
/**
 * Records that the current thread is no longer waiting on the specified guard.
 */
@GuardedBy("lock")
private void endWaitingFor(Guard guard) {
  int waiters = --guard.waiterCount;
  if (waiters == 0) {
    // unlink guard from activeGuards
    for (Guard p = activeGuards, pred = null; ; pred = p, p = p.next) {
      if (p == guard) {
        if (pred == null) {
          activeGuards = p.next;
        } else {
          pred.next = p.next;
        }
        p.next = null; // help GC
        break;
      }
    }
  }
}
 
開發者ID:zugzug90,項目名稱:guava-mock,代碼行數:22,代碼來源:Monitor.java

示例9: awaitNanos

import javax.annotation.concurrent.GuardedBy; //導入依賴的package包/類
/**
 * Caller should check before calling that guard is not satisfied.
 */
@GuardedBy("lock")
private boolean awaitNanos(Guard guard, long nanos, boolean signalBeforeWaiting)
    throws InterruptedException {
  boolean firstTime = true;
  try {
    do {
      if (nanos <= 0L) {
        return false;
      }
      if (firstTime) {
        if (signalBeforeWaiting) {
          signalNextWaiter();
        }
        beginWaitingFor(guard);
        firstTime = false;
      }
      nanos = guard.condition.awaitNanos(nanos);
    } while (!guard.isSatisfied());
    return true;
  } finally {
    if (!firstTime) {
      endWaitingFor(guard);
    }
  }
}
 
開發者ID:zugzug90,項目名稱:guava-mock,代碼行數:29,代碼來源:Monitor.java

示例10: removeEntryForTesting

import javax.annotation.concurrent.GuardedBy; //導入依賴的package包/類
@GuardedBy("this")
boolean removeEntryForTesting(E entry) {
  int hash = entry.getHash();
  int newCount = this.count - 1;
  AtomicReferenceArray<E> table = this.table;
  int index = hash & (table.length() - 1);
  E first = table.get(index);

  for (E e = first; e != null; e = e.getNext()) {
    if (e == entry) {
      ++modCount;
      E newFirst = removeFromChain(first, e);
      newCount = this.count - 1;
      table.set(index, newFirst);
      this.count = newCount; // write-volatile
      return true;
    }
  }

  return false;
}
 
開發者ID:paul-hammant,項目名稱:googles-monorepo-demo,代碼行數:22,代碼來源:MapMakerInternalMap.java

示例11: copyEntry

import javax.annotation.concurrent.GuardedBy; //導入依賴的package包/類
/**
 * Copies {@code original} into a new entry chained to {@code newNext}. Returns the new entry,
 * or {@code null} if {@code original} was already garbage collected.
 */
@GuardedBy("this")
ReferenceEntry<K, V> copyEntry(ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
  if (original.getKey() == null) {
    // key collected
    return null;
  }

  ValueReference<K, V> valueReference = original.getValueReference();
  V value = valueReference.get();
  if ((value == null) && valueReference.isActive()) {
    // value collected
    return null;
  }

  ReferenceEntry<K, V> newEntry = map.entryFactory.copyEntry(this, original, newNext);
  newEntry.setValueReference(valueReference.copyFor(this.valueReferenceQueue, value, newEntry));
  return newEntry;
}
 
開發者ID:paul-hammant,項目名稱:googles-monorepo-demo,代碼行數:23,代碼來源:LocalCache.java

示例12: scheduleTimer

import javax.annotation.concurrent.GuardedBy; //導入依賴的package包/類
/**
 * Schedule a timer to fire on the actor thread after a delay.
 *
 * @param delay Delay, in nanoseconds
 */
@GuardedBy("lock")
private void scheduleTimer(final long delay) {
    if (haveTimer) {
        LOG.debug("{}: timer already scheduled on {}", context.persistenceId(), this);
        return;
    }
    if (queue.hasSuccessor()) {
        LOG.debug("{}: connection {} has a successor, not scheduling timer", context.persistenceId(), this);
        return;
    }

    // If the delay is negative, we need to schedule an action immediately. While the caller could have checked
    // for that condition and take appropriate action, but this is more convenient and less error-prone.
    final long normalized =  delay <= 0 ? 0 : Math.min(delay, context.config().getBackendAlivenessTimerInterval());

    final FiniteDuration dur = FiniteDuration.fromNanos(normalized);
    LOG.debug("{}: connection {} scheduling timeout in {}", context.persistenceId(), this, dur);
    context.executeInActor(this::runTimer, dur);
    haveTimer = true;
}
 
開發者ID:hashsdn,項目名稱:hashsdn-controller,代碼行數:26,代碼來源:AbstractClientConnection.java

示例13: expireEntries

import javax.annotation.concurrent.GuardedBy; //導入依賴的package包/類
@GuardedBy("this")
void expireEntries(long now) {
  drainRecencyQueue();

  ReferenceEntry<K, V> e;
  while ((e = writeQueue.peek()) != null && map.isExpired(e, now)) {
    if (!removeEntry(e, e.getHash(), RemovalCause.EXPIRED)) {
      throw new AssertionError();
    }
  }
  while ((e = accessQueue.peek()) != null && map.isExpired(e, now)) {
    if (!removeEntry(e, e.getHash(), RemovalCause.EXPIRED)) {
      throw new AssertionError();
    }
  }
}
 
開發者ID:paul-hammant,項目名稱:googles-monorepo-demo,代碼行數:17,代碼來源:LocalCache.java

示例14: removeEntryFromChain

import javax.annotation.concurrent.GuardedBy; //導入依賴的package包/類
@GuardedBy("this")
@Nullable
ReferenceEntry<K, V> removeEntryFromChain(
    ReferenceEntry<K, V> first, ReferenceEntry<K, V> entry) {
  int newCount = count;
  ReferenceEntry<K, V> newFirst = entry.getNext();
  for (ReferenceEntry<K, V> e = first; e != entry; e = e.getNext()) {
    ReferenceEntry<K, V> next = copyEntry(e, newFirst);
    if (next != null) {
      newFirst = next;
    } else {
      removeCollectedEntry(e);
      newCount--;
    }
  }
  this.count = newCount;
  return newFirst;
}
 
開發者ID:paul-hammant,項目名稱:googles-monorepo-demo,代碼行數:19,代碼來源:LocalCache.java

示例15: terminated

import javax.annotation.concurrent.GuardedBy; //導入依賴的package包/類
@GuardedBy("monitor")
private void terminated(final State from) {
  switch (from) {
    case NEW:
      TERMINATED_FROM_NEW_CALLBACK.enqueueOn(listeners);
      break;
    case RUNNING:
      TERMINATED_FROM_RUNNING_CALLBACK.enqueueOn(listeners);
      break;
    case STOPPING:
      TERMINATED_FROM_STOPPING_CALLBACK.enqueueOn(listeners);
      break;
    case STARTING:
    case TERMINATED:
    case FAILED:
    default:
      throw new AssertionError();
  }
}
 
開發者ID:paul-hammant,項目名稱:googles-monorepo-demo,代碼行數:20,代碼來源:AbstractService.java


注:本文中的javax.annotation.concurrent.GuardedBy類示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。