diff --git a/src/main/java/bdv/img/cache/VolatileGlobalCellCache.java b/src/main/java/bdv/img/cache/VolatileGlobalCellCache.java
index a1a386323ab46d4f42c7f8d04629bf36a6c6487f..08a7c956c4e2b3096006b21006f505ef4e208be1 100644
--- a/src/main/java/bdv/img/cache/VolatileGlobalCellCache.java
+++ b/src/main/java/bdv/img/cache/VolatileGlobalCellCache.java
@@ -407,20 +407,23 @@ public class VolatileGlobalCellCache< A extends VolatileAccess > implements Cach
*
* @return a cell with the specified coordinates.
*/
- public synchronized VolatileCell< A > createGlobal( final int[] cellDims, final long[] cellMin, final int timepoint, final int setup, final int level, final int index, final LoadingStrategy loadingStrategy )
+ public VolatileCell< A > createGlobal( final int[] cellDims, final long[] cellMin, final int timepoint, final int setup, final int level, final int index, final LoadingStrategy loadingStrategy )
{
final Key k = new Key( timepoint, setup, level, index );
Entry entry = null;
- final Reference< Entry > ref = softReferenceCache.get( k );
- if ( ref != null )
- entry = ref.get();
-
- if ( entry == null )
+ synchronized ( softReferenceCache )
{
- final VolatileCell< A > cell = new VolatileCell< A >( cellDims, cellMin, loader.emptyArray( cellDims ) );
- entry = new Entry( k, cell );
- softReferenceCache.put( k, new WeakReference< Entry >( entry ) );
+ final Reference< Entry > ref = softReferenceCache.get( k );
+ if ( ref != null )
+ entry = ref.get();
+
+ if ( entry == null )
+ {
+ final VolatileCell< A > cell = new VolatileCell< A >( cellDims, cellMin, loader.emptyArray( cellDims ) );
+ entry = new Entry( k, cell );
+ softReferenceCache.put( k, new WeakReference< Entry >( entry ) );
+ }
}
switch ( loadingStrategy )