Java 类java.util.concurrent.locks.ReadWriteLock 实例源码
项目:dremio-oss
文件:RocksDBStore.java
public RocksDBStore(String name, ColumnFamilyDescriptor family, ColumnFamilyHandle handle, RocksDB db, int stripes) {
super();
this.family = family;
this.name = name;
this.db = db;
this.parallel = stripes;
this.handle = handle;
this.sharedLocks = new AutoCloseableLock[stripes];
this.exclusiveLocks = new AutoCloseableLock[stripes];
for (int i = 0; i < stripes; i++) {
ReadWriteLock core = new ReentrantReadWriteLock();
sharedLocks[i] = new AutoCloseableLock(core.readLock());
exclusiveLocks[i] = new AutoCloseableLock(core.writeLock());
}
}
项目:angel
文件:App.java
public App(AMContext context) {
super(App.class.getName());
this.context = context;
stateMachine = stateMachineFactory.make(this);
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
this.readLock = readWriteLock.readLock();
this.writeLock = readWriteLock.writeLock();
this.launchTime = context.getStartTime();
shouldRetry = false;
diagnostics = new ArrayList<String>();
stateTimeOutMs =
context.getConf().getLong(AngelConf.ANGEL_AM_APPSTATE_TIMEOUT_MS,
AngelConf.DEFAULT_ANGEL_AM_APPSTATE_TIMEOUT_MS);
stateToTsMap = new HashMap<AppState, Long>();
stateToTsMap.put(AppState.NEW, context.getClock().getTime());
stopped = new AtomicBoolean(false);
}
项目:angel
文件:AMPSAgent.java
public AMPSAgent(AMContext context, PSAgentId id, Location location) {
this.context = context;
this.id = id;
this.location = location;
this.diagnostics = new ArrayList<String>();
this.failedAttempts = new ArrayList<PSAgentAttemptId>();
this.attempts = new HashMap<PSAgentAttemptId, PSAgentAttempt>();
if (context.getRunningMode() == RunningMode.ANGEL_PS_PSAGENT) {
this.stateMachine = stateMachineFactoryForAllMode.make(this);
} else {
this.stateMachine = stateMachineFactoryForPSMode.make(this);
}
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
this.readLock = readWriteLock.readLock();
this.writeLock = readWriteLock.writeLock();
}
项目:angel
文件:AMTask.java
public AMTask(TaskId id, AMTask amTask) {
state = AMTaskState.NEW;
taskId = id;
metrics = new HashMap<String, String>();
startTime = -1;
finishTime = -1;
matrixIdToClockMap = new Int2IntOpenHashMap();
// if amTask is not null, we should clone task state from it
if (amTask == null) {
iteration = 0;
progress = 0.0f;
} else {
iteration = amTask.getIteration();
progress = amTask.getProgress();
matrixIdToClockMap.putAll(amTask.matrixIdToClockMap);
}
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
readLock = readWriteLock.readLock();
writeLock = readWriteLock.writeLock();
}
项目:angel
文件:AMWorker.java
public AMWorker(WorkerId id, AMContext context, List<TaskId> taskIds) {
this.id = id;
this.context = context;
this.taskIds = taskIds;
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
readLock = readWriteLock.readLock();
writeLock = readWriteLock.writeLock();
stateMachine = stateMachineFactory.make(this);
metrics = new HashMap<String, String>();
diagnostics = new ArrayList<String>();
attempts = new HashMap<WorkerAttemptId, WorkerAttempt>();
failedAttempts = new HashSet<WorkerAttemptId>();
maxAttempts =
context.getConf().getInt(AngelConf.ANGEL_WORKER_MAX_ATTEMPTS,
AngelConf.DEFAULT_WORKER_MAX_ATTEMPTS);
}
项目:angel
文件:AMWorkerGroup.java
/**
* Create a AMWorkerGroup
* @param groupId worker group id
* @param context master context
* @param workerMap workers contains in worker group
* @param leader leader worker of worker group
* @param splitIndex training data block index assgined to this worker group
*/
public AMWorkerGroup(WorkerGroupId groupId, AMContext context, Map<WorkerId, AMWorker> workerMap,
WorkerId leader, int splitIndex) {
this.context = context;
this.groupId = groupId;
this.workerMap = workerMap;
this.leader = leader;
this.splitIndex = splitIndex;
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
readLock = readWriteLock.readLock();
writeLock = readWriteLock.writeLock();
stateMachine = stateMachineFactory.make(this);
diagnostics = new ArrayList<String>();
successWorkerSet = new HashSet<WorkerId>();
failedWorkerSet = new HashSet<WorkerId>();
killedWorkerSet = new HashSet<WorkerId>();
}
项目:LearningOfThinkInJava
文件:ReadWriteLockDemo1.java
public static void main(String[] args) {
//创建并发访问的账户
MyCount myCount = new MyCount("95599200901215522", 10000);
//创建一个锁对象
ReadWriteLock lock = new ReentrantReadWriteLock(false);
//创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(2);
//创建一些并发访问用户,一个信用卡,存的存,取的取,好热闹啊
User u1 = new User("张三", myCount, -4000, lock, true);
User u2 = new User("张三他爹", myCount, 6000, lock, false);
User u3 = new User("张三他弟", myCount, -8000, lock, false);
User u4 = new User("张三", myCount, 800, lock, false);
User u5 = new User("张三他爹", myCount, 0, lock, true);
//在线程池中执行各个用户的操作
pool.execute(u1);
pool.execute(u2);
pool.execute(u3);
pool.execute(u4);
pool.execute(u5);
//关闭线程池
pool.shutdown();
}
项目:configx
文件:StandardBeanLifecycleDecorator.java
public Context<ReadWriteLock> decorateDestructionCallback(final Runnable callback) {
if (callback == null) {
return null;
}
final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
return new Context<ReadWriteLock>(new Runnable() {
public void run() {
Lock lock = readWriteLock.writeLock();
lock.lock();
try {
callback.run();
} finally {
lock.unlock();
}
}
}, readWriteLock);
}
项目:guava-mock
文件:StripedTest.java
private static List<Striped<?>> weakImplementations() {
return ImmutableList.<Striped<?>>builder()
.add(new Striped.SmallLazyStriped<ReadWriteLock>(50, READ_WRITE_LOCK_SUPPLIER))
.add(new Striped.SmallLazyStriped<ReadWriteLock>(64, READ_WRITE_LOCK_SUPPLIER))
.add(new Striped.LargeLazyStriped<ReadWriteLock>(50, READ_WRITE_LOCK_SUPPLIER))
.add(new Striped.LargeLazyStriped<ReadWriteLock>(64, READ_WRITE_LOCK_SUPPLIER))
.add(new Striped.SmallLazyStriped<Lock>(50, LOCK_SUPPLER))
.add(new Striped.SmallLazyStriped<Lock>(64, LOCK_SUPPLER))
.add(new Striped.LargeLazyStriped<Lock>(50, LOCK_SUPPLER))
.add(new Striped.LargeLazyStriped<Lock>(64, LOCK_SUPPLER))
.add(new Striped.SmallLazyStriped<Semaphore>(50, SEMAPHORE_SUPPLER))
.add(new Striped.SmallLazyStriped<Semaphore>(64, SEMAPHORE_SUPPLER))
.add(new Striped.LargeLazyStriped<Semaphore>(50, SEMAPHORE_SUPPLER))
.add(new Striped.LargeLazyStriped<Semaphore>(64, SEMAPHORE_SUPPLER))
.build();
}
项目:Pet-Supply-Store
文件:DriveStorage.java
protected StoreImage loadFromDisk(Path imgFile, long id) {
byte[] imgData = null;
// Try aquiring a lock for a file.
ReadWriteLock l = getIDLock(id);
l.readLock().lock();
try {
imgData = Files.readAllBytes(imgFile);
} catch (IOException ioException) {
log.warn("An IOException occured while trying to read the file \"" + imgFile.toAbsolutePath()
+ "\" from disk. Returning null.", ioException);
} finally {
l.readLock().unlock();
}
if (imgData == null) {
return null;
}
ImageSize size = imgDB.getImageSize(id);
if (size == null) {
return null;
}
return new StoreImage(id, imgData, size);
}
项目:Elasticsearch
文件:Translog.java
public Translog(TranslogConfig config, String nodeId) {
super(config.getShardId(), config.getIndexSettings());
this.config = null;
recoveredTranslogs = null;
syncScheduler = null;
bigArrays = null;
ReadWriteLock rwl = new ReentrantReadWriteLock();
readLock = new ReleasableLock(rwl.readLock());
writeLock = new ReleasableLock(rwl.writeLock());
location = null;
current = null;
currentCommittingTranslog = null;
lastCommittedTranslogFileGeneration = -1;
config = null;
translogUUID = null;
}
项目:hadoop
文件:ContainerImpl.java
public ContainerImpl(Configuration conf, Dispatcher dispatcher,
NMStateStoreService stateStore, ContainerLaunchContext launchContext,
Credentials creds, NodeManagerMetrics metrics,
ContainerTokenIdentifier containerTokenIdentifier) {
this.daemonConf = conf;
this.dispatcher = dispatcher;
this.stateStore = stateStore;
this.launchContext = launchContext;
this.containerTokenIdentifier = containerTokenIdentifier;
this.containerId = containerTokenIdentifier.getContainerID();
this.resource = containerTokenIdentifier.getResource();
this.diagnostics = new StringBuilder();
this.credentials = creds;
this.metrics = metrics;
user = containerTokenIdentifier.getApplicationSubmitter();
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
this.readLock = readWriteLock.readLock();
this.writeLock = readWriteLock.writeLock();
stateMachine = stateMachineFactory.make(this);
}
项目:strongbox
文件:GenericDynamoDB.java
public GenericDynamoDB(AmazonDynamoDB client, AWSCredentialsProvider awsCredentials,
ClientConfiguration clientConfiguration,
SecretsGroupIdentifier groupIdentifier, Class<Entry> clazz, Converters converters,
ReadWriteLock readWriteLock) {
this.clazz = clazz;
buildMappings();
this.converters = converters;
this.awsCredentials = awsCredentials;
this.clientConfiguration = clientConfiguration;
this.client = client;
this.region = RegionUtils.getRegion(groupIdentifier.region.getName());
this.readWriteLock = readWriteLock;
RegionLocalResourceName resourceName = new RegionLocalResourceName(groupIdentifier);
this.tableName = resourceName.toString();
}
项目:strongbox
文件:GenericFile.java
public GenericFile(java.io.File path,
Converters converters,
Encryptor encryptor,
EncryptionContext encryptionContext,
Class<Entry> clazz,
ReadWriteLock readWriteLock) {
this.file = path;
this.converters = converters;
this.clazz = clazz;
this.readWriteLock = readWriteLock;
this.encryptor = encryptor;
this.encryptionContext = encryptionContext;
buildMappings();
open();
}
项目:strongbox
文件:DefaultSecretsGroupManager.java
public void backup(SecretsGroupIdentifier group, Store backupStore, boolean failIfBackupStoreAlreadyExists) {
ReadWriteLock readWriteLock = getReadWriteLock(group);
readWriteLock.writeLock().lock();
try {
Store currentStore = getCurrentStore(group, readWriteLock);
if (backupStore.exists()) {
if (failIfBackupStoreAlreadyExists) {
throw new AlreadyExistsException("The store to backup to already exists");
}
backupStore.delete();
}
backupStore.create();
currentStore.stream().forEach(backupStore::create);
backupStore.close();
} finally {
readWriteLock.writeLock().unlock();
}
}
项目:strongbox
文件:DefaultSecretsGroupManager.java
public void restore(SecretsGroupIdentifier group, Store backupStore, boolean failIfStoreToRestoreAlreadyExists) {
ReadWriteLock readWriteLock = getReadWriteLock(group);
readWriteLock.writeLock().lock();
try {
Store currentStore = getCurrentStore(group, readWriteLock);
if (currentStore.exists()) {
if (failIfStoreToRestoreAlreadyExists) {
throw new AlreadyExistsException("The store to restore already exists");
}
currentStore.delete();
}
currentStore.create();
backupStore.stream().forEach(currentStore::create);
currentStore.close();
} finally {
readWriteLock.writeLock().unlock();
}
}
项目:Aceso
文件:AbstractPatchesLoaderImpl.java
@Override
public boolean load() {
try {
InstantFixClassMap.setClassLoader(getClass().getClassLoader());
HashMap<Integer, ReadWriteLock> lockMap = new HashMap<>();
HashMap<Integer, String> classIndexMap = new HashMap<>();
String[] patchedClasses = getPatchedClasses();
int[] patchedClassIndexes = getPatchedClassIndexes();
if (patchedClasses.length != patchedClassIndexes.length) {
throw new IllegalArgumentException("patchedClasses's len is " + patchedClasses.length + ", but patchedClassIndexs's len is " + patchedClassIndexes.length);
}
for (int i = 0; i < patchedClasses.length; i++) {
String className = patchedClasses[i];
int classIndex = patchedClassIndexes[i];
lockMap.put(classIndex, new ReentrantReadWriteLock());
classIndexMap.put(classIndex, className);
Log.i(TAG, String.format("patched %s", className));
}
InstantFixClassMap.setAtomMap(new InstantFixClassMap.AtomMap(classIndexMap, lockMap));
} catch (Throwable e) {
e.printStackTrace();
return false;
}
return true;
}
项目:googles-monorepo-demo
文件:StripedTest.java
private static List<Striped<?>> weakImplementations() {
return ImmutableList.<Striped<?>>builder()
.add(new Striped.SmallLazyStriped<ReadWriteLock>(50, READ_WRITE_LOCK_SUPPLIER))
.add(new Striped.SmallLazyStriped<ReadWriteLock>(64, READ_WRITE_LOCK_SUPPLIER))
.add(new Striped.LargeLazyStriped<ReadWriteLock>(50, READ_WRITE_LOCK_SUPPLIER))
.add(new Striped.LargeLazyStriped<ReadWriteLock>(64, READ_WRITE_LOCK_SUPPLIER))
.add(new Striped.SmallLazyStriped<Lock>(50, LOCK_SUPPLER))
.add(new Striped.SmallLazyStriped<Lock>(64, LOCK_SUPPLER))
.add(new Striped.LargeLazyStriped<Lock>(50, LOCK_SUPPLER))
.add(new Striped.LargeLazyStriped<Lock>(64, LOCK_SUPPLER))
.add(new Striped.SmallLazyStriped<Semaphore>(50, SEMAPHORE_SUPPLER))
.add(new Striped.SmallLazyStriped<Semaphore>(64, SEMAPHORE_SUPPLER))
.add(new Striped.LargeLazyStriped<Semaphore>(50, SEMAPHORE_SUPPLER))
.add(new Striped.LargeLazyStriped<Semaphore>(64, SEMAPHORE_SUPPLER))
.build();
}
项目:angel
文件:AMParameterServer.java
public AMParameterServer(String ip, ParameterServerId id, AMContext context) {
this.ip = ip;
this.id = id;
this.context = context;
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
readLock = readWriteLock.readLock();
writeLock = readWriteLock.writeLock();
stateMachine = stateMachineFactory.make(this);
attempts = new HashMap<PSAttemptId, PSAttempt>(2);
this.failedAttempts = new HashSet<PSAttemptId>(2);
maxAttempts =
context.getConf().getInt(AngelConf.ANGEL_PS_MAX_ATTEMPTS,
AngelConf.DEFAULT_PS_MAX_ATTEMPTS);
}
项目:MLE5109-Course-samples
文件:PendingRequests.java
PendingRequests(final Collection<String> groups, final ReadWriteLock rwLock) {
Map<String, Set<String>> requestSourceToRequestID = new HashMap<>();
Map<String, Lock> groupLocks = new HashMap<>();
for (String group : groups) {
groupLocks.put(group, new ReentrantLock());
requestSourceToRequestID.put(group, new HashSet<>());
}
this.requestSourceToRequestID = Collections.unmodifiableMap(requestSourceToRequestID);
this.groupLocks = Collections.unmodifiableMap(groupLocks);
this.rwLock = rwLock;
}
项目:angel
文件:YarnContainerAllocator.java
public YarnContainerAllocator(AMContext context) {
super(YarnContainerAllocator.class.getName());
this.context = context;
this.recordFactory = RecordFactoryProvider.getRecordFactory(null);
stopped = new AtomicBoolean(false);
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
readLock = readWriteLock.readLock();
writeLock = readWriteLock.writeLock();
}
项目:angel
文件:AMMatrixMetaManager.java
public AMMatrixMetaManager(AMContext context) {
this.context = context;
matrixMetaManager = new MatrixMetaManager();
matrixPartitionsOnPS = new HashMap<>();
matrixIdToPSSetMap = new HashMap<>();
psIdToMatrixIdsMap = new HashMap<>();
psIdToRecoverPartsMap = new ConcurrentHashMap<>();
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
readLock = readWriteLock.readLock();
writeLock = readWriteLock.writeLock();
}
项目:angel
文件:PSAgentAttempt.java
public PSAgentAttempt(PSAgentAttemptId attemptId, AMContext context, Location location) {
this.id = attemptId;
this.context = context;
this.location = location;
if (context.getRunningMode() == RunningMode.ANGEL_PS_PSAGENT) {
stateMachine = stateMachineFactoryForAllMode.make(this);
} else {
stateMachine = stateMachineFactoryForPSMode.make(this);
}
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
readLock = readWriteLock.readLock();
writeLock = readWriteLock.writeLock();
}
项目:angel
文件:Worker.java
/**
* Instantiates a new Worker.
*
* @param conf the conf
* @param appId the app id
* @param user the user
* @param workerAttemptId the worker attempt id
* @param masterLocation the master location
* @param initMinClock the init min clock
* @param isLeader the is leader
*/
public Worker(Configuration conf, ApplicationId appId, String user,
WorkerAttemptId workerAttemptId, Location masterLocation, int initMinClock,
boolean isLeader) {
this.conf = conf;
this.stopped = new AtomicBoolean(false);
this.workerInitFinishedFlag = new AtomicBoolean(false);
this.exitedFlag = new AtomicBoolean(false);
this.workerMetrics = new HashMap<String, String>();
this.connection = TConnectionManager.getConnection(conf);
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
readLockForTaskNum = readWriteLock.readLock();
writeLockForTaskNum = readWriteLock.writeLock();
activeTaskNum = conf.getInt(AngelConf.ANGEL_TASK_ACTUAL_NUM, 1);
this.appId = appId;
this.user = user;
this.masterLocation = masterLocation;
this.workerAttemptId = workerAttemptId;
this.isLeader = isLeader;
this.workerAttemptIdProto = ProtobufUtil.convertToIdProto(workerAttemptId);
this.initMinClock = initMinClock;
this.counterUpdater = new CounterUpdater();
WorkerContext.get().setWorker(this);
}
项目:incubator-netbeans
文件:FileLockManager.java
<T> T readAction(
@NonNull final FileObject file,
@NonNull final Callable<T> action) throws Exception {
Parameters.notNull("file", file); //NOI18N
Parameters.notNull("action", action); //NOI18N
final ReadWriteLock lck = getLock(file);
lck.readLock().lock();
try {
return action.call();
} finally {
lck.readLock().unlock();
}
}
项目:incubator-netbeans
文件:FileLockManager.java
<T> T writeAction(
@NonNull final FileObject file,
@NonNull final Callable<T> action) throws Exception {
Parameters.notNull("file", file); //NOI18N
Parameters.notNull("action", action); //NOI18N
final ReadWriteLock lck = getLock(file);
lck.writeLock().lock();
try {
return action.call();
} finally {
lck.writeLock().unlock();
}
}
项目:hadoop-oss
文件:KeyAuthorizationKeyProvider.java
/**
* The constructor takes a {@link KeyProviderCryptoExtension} and an
* implementation of <code>KeyACLs</code>. All calls are delegated to the
* provider keyProvider after authorization check (if required)
* @param keyProvider the key provider
* @param acls the Key ACLs
*/
public KeyAuthorizationKeyProvider(KeyProviderProxyReEncryptionExtension keyProvider,
KeyACLs acls) {
super(keyProvider, null);
this.provider = keyProvider;
this.acls = acls;
ReadWriteLock lock = new ReentrantReadWriteLock(true);
readLock = lock.readLock();
writeLock = lock.writeLock();
}
项目:LearningOfThinkInJava
文件:ReadWriteLockDemo1.java
User(String name, MyCount myCount, int iocash, ReadWriteLock myLock, boolean ischeck) {
this.name = name;
this.myCount = myCount;
this.iocash = iocash;
this.myLock = myLock;
this.ischeck = ischeck;
}
项目:outcomes
文件:Main.java
private void readWriteLock() {
ExecutorService executor = Executors.newFixedThreadPool(2);
Map<String, String> map = new HashMap<>();
ReadWriteLock lock = new ReentrantReadWriteLock();
executor.submit(() -> {
lock.writeLock().lock();
try {
sleep(1);
map.put("foo", "bar");
} finally {
lock.writeLock().unlock();
}
});
Runnable readTask = () -> {
lock.readLock().lock();
try {
System.out.println(map.get("foo"));
sleep(1);
} finally {
lock.readLock().unlock();
}
};
executor.submit(readTask);
executor.submit(readTask);
stop(executor);
}
项目:VASSAL-src
文件:CountingReadWriteLockTest.java
@Test
public void testReadLockReadUnlock() {
final ReadWriteLock rwl = new CountingReadWriteLock();
final Lock r = rwl.readLock();
r.lock();
r.unlock();
}
项目:VASSAL-src
文件:CountingReadWriteLockTest.java
@Test
public void testWriteLockWriteUnlock() {
final ReadWriteLock rwl = new CountingReadWriteLock();
final Lock w = rwl.writeLock();
w.lock();
w.unlock();
}
项目:VASSAL-src
文件:CountingReadWriteLockTest.java
@Test
public void testWriteLockBlocksReadLock() {
final ReadWriteLock rwl = new CountingReadWriteLock();
final Lock w = rwl.writeLock();
w.lock();
final Lock r = rwl.readLock();
assertFalse(r.tryLock());
}
项目:VASSAL-src
文件:CountingReadWriteLockTest.java
@Test
public void testWriteLockBlocksWriteLock() {
final ReadWriteLock rwl = new CountingReadWriteLock();
final Lock w = rwl.writeLock();
w.lock();
assertFalse(w.tryLock());
}
项目:VASSAL-src
文件:CountingReadWriteLockTest.java
@Test
public void testReadLockBlocksWriteLock() {
final ReadWriteLock rwl = new CountingReadWriteLock();
final Lock r = rwl.readLock();
r.lock();
final Lock w = rwl.writeLock();
assertFalse(w.tryLock());
}
项目:VASSAL-src
文件:CountingReadWriteLockTest.java
@Test
public void testReadLockDoesNotBlockReadLock() {
final ReadWriteLock rwl = new CountingReadWriteLock();
final Lock r = rwl.readLock();
r.lock();
assertTrue(r.tryLock());
}
项目:alfresco-repository
文件:MetadataExtracterRegistry.java
public MetadataExtracterRegistry()
{
// initialise lists
extracters = new ArrayList<MetadataExtracter>(10);
extracterCache = new HashMap<String, List<MetadataExtracter>>(17);
embedderCache = new HashMap<String, List<MetadataEmbedder>>(17);
// create lock objects for access to the cache
ReadWriteLock extractionCacheLock = new ReentrantReadWriteLock();
extracterCacheReadLock = extractionCacheLock.readLock();
extracterCacheWriteLock = extractionCacheLock.writeLock();
}
项目:rocketmq-rocketmq-all-4.1.0-incubating
文件:LocalMessageCache.java
private ReadWriteLock getLockInProcessQueue(ProcessQueue pq) {
try {
return (ReadWriteLock) FieldUtils.readDeclaredField(pq, "lockTreeMap", true);
} catch (IllegalAccessException e) {
return null;
}
}
项目:rxtools
文件:SubjectMap.java
/**
* Constructs a new, empty SubjectMap
*/
public SubjectMap()
{
ReadWriteLock _readWriteLock = new ReentrantReadWriteLock();
_readLock = _readWriteLock.readLock();
_writeLock = _readWriteLock.writeLock();
_weakCache = new HashMap<>();
_cache = new HashMap<>();
_faults = BehaviorProcessor.create();
_weakSources = new HashMap<>();
}
项目:neoscada
文件:ConfigurationFactoryImpl.java
public ConfigurationFactoryImpl ()
{
final ReadWriteLock lock = new ReentrantReadWriteLock ();
this.readLock = lock.readLock ();
this.writeLock = lock.writeLock ();
final BundleContext context = FrameworkUtil.getBundle ( DataContext.class ).getBundleContext ();
this.executor = new ScheduledExportedExecutorService ( "org.eclipse.scada.da.server.exporter.rest", 1 );
this.hiveSource = new ServiceListenerHiveSource ( context, this.executor );
this.hiveSource.open ();
}
项目:outcomes
文件:Lock3.java
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(2);
Map<String, String> map = new HashMap<>();
ReadWriteLock lock = new ReentrantReadWriteLock();
executor.submit(() -> {
lock.writeLock().lock();
try {
ConcurrentUtils.sleep(1);
map.put("foo", "bar");
} finally {
lock.writeLock().unlock();
}
});
Runnable readTask = () -> {
lock.readLock().lock();
try {
System.out.println(map.get("foo"));
ConcurrentUtils.sleep(1);
} finally {
lock.readLock().unlock();
}
};
executor.submit(readTask);
executor.submit(readTask);
ConcurrentUtils.stop(executor);
}