Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 12099)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 12100)
@@ -35,4 +35,5 @@
 import java.util.Optional;
 import java.util.concurrent.ForkJoinPool;
+import java.util.concurrent.TimeUnit;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
@@ -80,4 +81,5 @@
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
+import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
@@ -1529,5 +1531,21 @@
         getSettings(renderVirtualNodes);
 
-        data.getReadLock().lock();
+        try {
+            if (data.getReadLock().tryLock(1, TimeUnit.SECONDS)) {
+                try {
+                    paintWithLock(data, renderVirtualNodes, benchmark, bbox);
+                } finally {
+                    data.getReadLock().unlock();
+                }
+            } else {
+                Logging.warn("Cannot paint layer {0}: It is locked.");
+            }
+        } catch (InterruptedException e) {
+            Logging.warn("Cannot paint layer {0}: Interrupted");
+        }
+    }
+
+    private void paintWithLock(final DataSet data, boolean renderVirtualNodes, RenderBenchmarkCollector benchmark,
+            BBox bbox) {
         try {
             highlightWaySegments = data.getHighlightedWaySegments();
@@ -1575,6 +1593,4 @@
                     .put("paintSettings", paintSettings)
                     .put("renderVirtualNodes", renderVirtualNodes);
-        } finally {
-            data.getReadLock().unlock();
         }
     }
