JAL-1117 alleviate lock starvation
[jalview.git] / src / jalview / gui / FeatureRenderer.java
index 2db75bf..0aee327 100755 (executable)
@@ -18,6 +18,7 @@
 package jalview.gui;
 
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 
 import java.awt.*;
 import java.awt.event.*;
@@ -52,12 +53,12 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
   FontMetrics fm;
 
   int charOffset;
-
-  Hashtable featureColours = new Hashtable();
+  Map featureColours = new ConcurrentHashMap();
 
   // A higher level for grouping features of a
   // particular type
-  Hashtable featureGroups = new Hashtable();
+  Map featureGroups = new ConcurrentHashMap();
 
   // This is actually an Integer held in the hashtable,
   // Retrieved using the key feature type
@@ -85,13 +86,13 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
   {
     String[] renderOrder;
 
-    Hashtable featureGroups;
+    Map featureGroups;
 
-    Hashtable featureColours;
+    Map featureColours;
 
     float transparency;
 
-    Hashtable featureOrder;
+    Map featureOrder;
 
     public FeatureRendererSettings(String[] renderOrder,
             Hashtable featureGroups, Hashtable featureColours,
@@ -113,9 +114,9 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
     public FeatureRendererSettings(FeatureRenderer fr)
     {
       renderOrder = null;
-      featureGroups = new Hashtable();
-      featureColours = new Hashtable();
-      featureOrder = new Hashtable();
+      featureGroups = new ConcurrentHashMap();
+      featureColours = new ConcurrentHashMap();
+      featureOrder = new ConcurrentHashMap();
       if (fr.renderOrder != null)
       {
         this.renderOrder = new String[fr.renderOrder.length];
@@ -124,16 +125,16 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
       }
       if (fr.featureGroups != null)
       {
-        this.featureGroups = new Hashtable(fr.featureGroups);
+        this.featureGroups = new ConcurrentHashMap(fr.featureGroups);
       }
       if (fr.featureColours != null)
       {
-        this.featureColours = new Hashtable(fr.featureColours);
+        this.featureColours = new ConcurrentHashMap(fr.featureColours);
       }
-      Enumeration en = fr.featureColours.keys();
-      while (en.hasMoreElements())
+      Iterator en = fr.featureColours.keySet().iterator();
+      while (en.hasNext())
       {
-        Object next = en.nextElement();
+        Object next = en.next();
         Object val = featureColours.get(next);
         if (val instanceof GraduatedColor)
         {
@@ -144,7 +145,7 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
       this.transparency = fr.transparency;
       if (fr.featureOrder != null)
       {
-        this.featureOrder = new Hashtable(fr.featureOrder);
+        this.featureOrder = new ConcurrentHashMap(fr.featureOrder);
       }
     }
   }
@@ -1403,7 +1404,7 @@ public class FeatureRenderer implements jalview.api.FeatureRenderer
 
   }
 
-  Hashtable featureOrder = null;
+  Map featureOrder = null;
 
   /**
    * analogous to colour - store a normalized ordering for all feature types in