当前位置: 首页>>代码示例>>Java>>正文


Java ReentrantReadWriteLock.WriteLock方法代码示例

本文整理汇总了Java中java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock方法的典型用法代码示例。如果您正苦于以下问题:Java ReentrantReadWriteLock.WriteLock方法的具体用法?Java ReentrantReadWriteLock.WriteLock怎么用?Java ReentrantReadWriteLock.WriteLock使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在java.util.concurrent.locks.ReentrantReadWriteLock的用法示例。


在下文中一共展示了ReentrantReadWriteLock.WriteLock方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: replace

import java.util.concurrent.locks.ReentrantReadWriteLock; //导入方法依赖的package包/类
final boolean replace(final K key, final int hash, final V oldValue, final V newValue) {
  final ReentrantReadWriteLock.WriteLock writeLock = super.writeLock();
  writeLock.lock();
  try {
    HashEntry<K, V> e = getFirst(hash);
    while (e != null && (e.getEntryHash() != hash || !equalityKeyCompare(key, e))) {
      e = e.getNextEntry();
    }

    boolean replaced = false;
    if (e != null && equalityCompare(oldValue, e.getMapValue())) {
      replaced = true;
      e.setMapValue(newValue);
    }
    return replaced;
  } finally {
    writeLock.unlock();
  }
}
 
开发者ID:ampool,项目名称:monarch,代码行数:20,代码来源:CustomEntryConcurrentHashMap.java

示例2: put

import java.util.concurrent.locks.ReentrantReadWriteLock; //导入方法依赖的package包/类
@Override
public boolean put(byte[] bytes) {
  long[] hashes = new long[numHashFunctions];
  strategy.hashes(bytes, hashes);
  // make room for new values
  decrement();
  for (int i = 0; i < hashes.length; i++) {
    long idx = hashes[i] % numOfBuckets;
    ReentrantReadWriteLock.WriteLock currentLock = segments[(int)(idx & FAST_MOD_32)].writeLock();
    currentLock.lock();
    try { // just in case something goes wrong
      bucketSet.writeTag(idx, 0, Utils.MASKS[bitsPerBucket]); // write max val for bucket
    } finally {
      currentLock.unlock();
    }
  }
  // forever true since we always overwrite bucket content
  return true;
}
 
开发者ID:ponkin,项目名称:bloom,代码行数:20,代码来源:StableBloomFilter.java

示例3: decrement

import java.util.concurrent.locks.ReentrantReadWriteLock; //导入方法依赖的package包/类
private void decrement() {
  long pivot = ThreadLocalRandom.current().nextLong(numOfBuckets);
  for(int i=0; i<bucketsToDecrement; i++) {
    long idx = (pivot + i) % numOfBuckets;
    ReentrantReadWriteLock.WriteLock currentLock = segments[(int)(idx & FAST_MOD_32)].writeLock();
    currentLock.lock();
    try { // just in case something goes wrong
      long bucketVal = bucketSet.readTag(idx, 0);
      if(bucketVal != 0L) {
        bucketSet.writeTag(idx, 0, bucketVal-1);
      }
    } finally {
      currentLock.unlock();
    }
  }
}
 
开发者ID:ponkin,项目名称:bloom,代码行数:17,代码来源:StableBloomFilter.java

示例4: put

import java.util.concurrent.locks.ReentrantReadWriteLock; //导入方法依赖的package包/类
@Override
public boolean put(byte[] bytes) {
  // each of k hashes has it`s own bit vector slice
  long[] hashes = new long[numHashFunctions];
  strategy.hashes(bytes, hashes);

  boolean bitsChanged = false;
  for (int i = 0; i < hashes.length; i++) {
    long idx = i * sliceSize + (hashes[i] % sliceSize);
    // x mod n = x & (n-1) if n equals power of 2
    // idx is always positive
    ReentrantReadWriteLock.WriteLock currentLock = segments[(int)(idx & FAST_MOD_32)].writeLock();
    currentLock.lock();
    try { // just in case something goes wrong
      bitsChanged |= bits.set(idx);
    } finally {
      currentLock.unlock();
    }
  }
  if(bitsChanged) {
    numItems.incrementAndGet();
  }
  return bitsChanged;
}
 
开发者ID:ponkin,项目名称:bloom,代码行数:25,代码来源:PartitionedBloomFilter.java

示例5: clear

import java.util.concurrent.locks.ReentrantReadWriteLock; //导入方法依赖的package包/类
@Override
public void clear() {
  ReentrantReadWriteLock.WriteLock[] locks = 
    new ReentrantReadWriteLock.WriteLock[segments.length];
  for(int i=0; i<segments.length; i++) {
    locks[i] = segments[i].writeLock();
    locks[i].lock();
  }
  try { // just in case something goes wrong
    bits.clear();
  } finally {
    for (ReentrantReadWriteLock.WriteLock seg : locks) {
      seg.unlock();
    }
  }
}
 
开发者ID:ponkin,项目名称:bloom,代码行数:17,代码来源:PartitionedBloomFilter.java

示例6: put

import java.util.concurrent.locks.ReentrantReadWriteLock; //导入方法依赖的package包/类
@Override
public boolean put(byte[] item) {
  long[] hashes = new long[2];
  strategy.hashes(item, hashes);
  long bucketIdx = hashes[0] % numBuckets;
  long tag = fingerprint(hashes[1]);
  boolean itemAdded = false;
  ReentrantReadWriteLock.WriteLock lock = segments[(int)(bucketIdx & FAST_MOD_32)].writeLock();
  lock.lock();
  try {
    itemAdded = table.append(bucketIdx, tag);
  } finally {
    lock.unlock();
  }
  if(!itemAdded) {
    itemAdded = putInAlt(bucketIdx, tag);
  }
  if(itemAdded) {
    count.incrementAndGet();
  } else {
    log.log(Level.WARNING, String.format("Cucko table exceed capacity: %1$d elements", count.get()));
  }
  return itemAdded;
}
 
开发者ID:ponkin,项目名称:bloom,代码行数:25,代码来源:CuckooFilter.java

示例7: putInAlt

import java.util.concurrent.locks.ReentrantReadWriteLock; //导入方法依赖的package包/类
/**
 * Try to put tag in alternative bucket
 */
private boolean putInAlt(long bucketIdx, long tag) {
  int kickNum = 0;
  long altIdx = altIndex(bucketIdx, tag);
  boolean itemAdded = false;
  while(!itemAdded && kickNum < MAX_KICK_NUM ) {
    ReentrantReadWriteLock.WriteLock lock = segments[(int)(altIdx & FAST_MOD_32)].writeLock();
    lock.lock();
    try {
      itemAdded = table.append(altIdx, tag);
      if(!itemAdded) {
        int posToKick = ThreadLocalRandom.current().nextInt(tagsPerBucket);
        long oldTag = table.readTag(altIdx, posToKick);
        table.writeTag(altIdx, posToKick, tag);
        tag = oldTag;
        altIdx = altIndex(altIdx, oldTag);
      }
    } finally {
      lock.unlock();
    }
    kickNum++;
  }
  return itemAdded;
}
 
开发者ID:ponkin,项目名称:bloom,代码行数:27,代码来源:CuckooFilter.java

示例8: put

import java.util.concurrent.locks.ReentrantReadWriteLock; //导入方法依赖的package包/类
final V put(final K key, final int hash, final V value, final boolean onlyIfAbsent) {
  final ReentrantReadWriteLock.WriteLock writeLock = super.writeLock();
  writeLock.lock();
  try {
    int c = this.count;
    if (c++ > this.threshold) {
      rehash();
    }
    final HashEntry<K, V>[] tab = this.table;
    final int index = hash & (tab.length - 1);
    final HashEntry<K, V> first = tab[index];
    HashEntry<K, V> e = first;
    while (e != null && (e.getEntryHash() != hash || !equalityKeyCompare(key, e))) {
      e = e.getNextEntry();
    }

    final V oldValue;
    if (e != null) {
      oldValue = e.getMapValue();
      if (!onlyIfAbsent) {
        e.setMapValue(value);
      }
    } else {
      oldValue = null;
      ++this.modCount;
      tab[index] = this.entryCreator.newEntry(key, hash, first, value);
      this.count = c; // write-volatile
    }
    return oldValue;
  } finally {
    writeLock.unlock();
  }
}
 
开发者ID:ampool,项目名称:monarch,代码行数:34,代码来源:CustomEntryConcurrentHashMap.java

示例9: releaseWriteLock

import java.util.concurrent.locks.ReentrantReadWriteLock; //导入方法依赖的package包/类
/**
 * Releases write lock, checking that it had a hold count of 1.
 */
void releaseWriteLock(PublicReentrantReadWriteLock lock) {
    ReentrantReadWriteLock.WriteLock writeLock = lock.writeLock();
    assertWriteLockedByMoi(lock);
    assertEquals(1, lock.getWriteHoldCount());
    writeLock.unlock();
    assertNotWriteLocked(lock);
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:11,代码来源:ReentrantReadWriteLockTest.java

示例10: mergeInPlace

import java.util.concurrent.locks.ReentrantReadWriteLock; //导入方法依赖的package包/类
@Override
public Filter mergeInPlace(Filter other) throws Exception {
  if (other == null) {
    throw new IncompatibleMergeException("Cannot merge null stable bloom filter");
  }

  if (!(other instanceof StableBloomFilter)) {
    throw new IncompatibleMergeException(
        "Cannot merge bloom filter of class " + other.getClass().getName()
        );
  }

  StableBloomFilter that = (StableBloomFilter) other;

  if (this.bucketSet.sizeInBits() != that.bucketSet.sizeInBits()) {
    throw new IncompatibleMergeException("Cannot merge bloom filters with different bit size");
  }

  if (this.numHashFunctions != that.numHashFunctions) {
    throw new IncompatibleMergeException(
        "Cannot merge bloom filters with different number of hash functions"
        );
  }

  // lock all segments
  ReentrantReadWriteLock.WriteLock[] locks = 
    new ReentrantReadWriteLock.WriteLock[segments.length];
  for(int i=0; i<segments.length; i++) {
    locks[i] = segments[i].writeLock();
    locks[i].lock();
  }
  try {
    this.bucketSet.putAll(that.bucketSet);
  } finally {
    for (ReentrantReadWriteLock.WriteLock seg : locks) {
      seg.unlock();
    }
  }
  return this;
}
 
开发者ID:ponkin,项目名称:bloom,代码行数:41,代码来源:StableBloomFilter.java

示例11: mergeInPlace

import java.util.concurrent.locks.ReentrantReadWriteLock; //导入方法依赖的package包/类
@Override
public Filter mergeInPlace(Filter other) throws Exception {
  if (other == null) {
    throw new IncompatibleMergeException("Cannot merge null bloom filter");
  }

  if (!(other instanceof PartitionedBloomFilter)) {
    throw new IncompatibleMergeException(
        String.format("Cannot merge bloom filter of class %s", other.getClass().getName()));
  }

  PartitionedBloomFilter that = (PartitionedBloomFilter) other;

  if (this.bitSize() != that.bitSize()) {
    throw new IncompatibleMergeException("Cannot merge bloom filters with different bit size");
  }

  if (this.numHashFunctions != that.numHashFunctions) {
    throw new IncompatibleMergeException(
        "Cannot merge bloom filters with different number of hash functions");
  }

  // lock all segments
  ReentrantReadWriteLock.WriteLock[] locks = 
    new ReentrantReadWriteLock.WriteLock[segments.length];
  for(int i=0; i<segments.length; i++) {
    locks[i] = segments[i].writeLock();
    locks[i].lock();
  }

  try { // just in case something goes wrong
    this.bits.putAll(that.bits);
  } finally {
    for (ReentrantReadWriteLock.WriteLock seg : locks) {
      seg.unlock();
    }
  }
  return this;
}
 
开发者ID:ponkin,项目名称:bloom,代码行数:40,代码来源:PartitionedBloomFilter.java

示例12: writeLock

import java.util.concurrent.locks.ReentrantReadWriteLock; //导入方法依赖的package包/类
public ReentrantReadWriteLock.WriteLock writeLock() {
	return writeLock;
}
 
开发者ID:DanceFirstThinkLater,项目名称:PetiteRPC,代码行数:4,代码来源:ReadWriteLockTemplate.java

示例13: remove

import java.util.concurrent.locks.ReentrantReadWriteLock; //导入方法依赖的package包/类
/**
 * Remove; match on key only if value null, else match both.
 */
// GemStone change
// added "condition" and "removeParams" parameters
final <C, P> V remove(final Object key, final int hash, final Object value,
    final MapCallback<K, V, C, P> condition, final C context, final P removeParams) {
  // End GemStone change
  final ReentrantReadWriteLock.WriteLock writeLock = super.writeLock();
  writeLock.lock();
  try {
    final int c = this.count - 1;
    final HashEntry<K, V>[] tab = this.table;
    final int index = hash & (tab.length - 1);
    final HashEntry<K, V> first = tab[index];
    HashEntry<K, V> e = first;
    // GemStone change
    // the entry previous to the matched one, if any
    HashEntry<K, V> p = null;
    while (e != null && (e.getEntryHash() != hash || !equalityKeyCompare(key, e))) {
      e = e.getNextEntry();
      if (p == null) {
        p = first;
      } else {
        p = p.getNextEntry();
      }
    }

    V oldValue = null;
    if (e != null) {
      final V v = e.getMapValue();
      // GemStone change
      // allow for passing in a null object for comparison during remove;
      // also invoke the provided condition to check for removal
      if ((value == NO_OBJECT_TOKEN || equalityCompareWithNulls(v, value))
          && (condition == null || condition.doRemoveValue(v, context, removeParams))) {
        // End GemStone change
        oldValue = v;
        // All entries following removed node can stay in list,
        // but all preceding ones need to be cloned.
        ++this.modCount;
        // GemStone changes BEGIN
        // update the next entry instead of cloning the nodes
        // this is primarily because we don't want to change
        // the underlying RegionEntry that may be used elsewhere
        final ReentrantReadWriteLock.WriteLock listWriteLock = this.listUpdateLock.writeLock();
        listWriteLock.lock();
        try {
          if (p == null) {
            tab[index] = e.getNextEntry();
          } else {
            p.setNextEntry(e.getNextEntry());
          }
        } finally {
          listWriteLock.unlock();
        }
        /*
         * (original code) HashEntry<K, V> newFirst = e.next; for (HashEntry<K, V> p = first; p
         * != e; p = p.next) { newFirst = this.entryCreator.newEntry(p.key, p.hash, newFirst,
         * p.value); } tab[index] = newFirst;
         */
        // GemStone changes END
        this.count = c; // write-volatile
      }
    }
    return oldValue;
  } finally {
    writeLock.unlock();
  }
}
 
开发者ID:ampool,项目名称:monarch,代码行数:71,代码来源:CustomEntryConcurrentHashMap.java

示例14: getWriteLock

import java.util.concurrent.locks.ReentrantReadWriteLock; //导入方法依赖的package包/类
/**
 * @return the write lock for the server
 */
ReentrantReadWriteLock.WriteLock getWriteLock() {
  return lock.writeLock();
}
 
开发者ID:fengchen8086,项目名称:ditb,代码行数:7,代码来源:HRegionServer.java


注:本文中的java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。