public final class ContextMutexFactory extends Object
Map. Client code is responsible to invoke
ContextMutexFactory.Mutex.close() on the obtained ContextMutexFactory.Mutex after having synchronized on the mutex; failure to do so
will leave an entry residing in the internal Map which may have adverse effects on the ability to garbage
collect the context object and the mutex.
The returned ContextMutexFactory.Mutexes implement Closeable, so can be conveniently used in a try-with-resources statement.
Typical usage would allow, for example, synchronizing access to a non-thread-safe Map on a per-key basis,
to avoid blocking other threads who would perform updates on other entries of the Map.
class Test {
private static final ContextMutexFactory mutexFactory = new ContextMutexFactory();
private final Map<String, String> mapToSync = new HashMap<String, String>();
public void test(String key, String value) {
// critical section
ContextMutexFactory.Mutex mutex = mutexFactory.mutexFor(key);
try {
synchronized (mutex) {
if (mapToSync.get(key) == null) {
mapToSync.put(key, value);
}
}
}
finally {
mutex.close();
}
}
}
| Modifier and Type | Class and Description |
|---|---|
class |
ContextMutexFactory.Mutex
Reference counted mutex, which will remove itself from the mutexMap when it is no longer referenced.
|
| Constructor and Description |
|---|
ContextMutexFactory() |
public ContextMutexFactory.Mutex mutexFor(Object mutexKey)
Copyright © 2017 Hazelcast, Inc.. All Rights Reserved.