From 49bb27409f71165b4d2daa6c38142a6466bb3946 Mon Sep 17 00:00:00 2001 From: jprocter Date: Sun, 1 Jul 2012 17:02:51 +0100 Subject: [PATCH] JAL-1117 alleviate lock starvation --- src/jalview/gui/FeatureRenderer.java | 33 +++++++++++++++++---------------- src/jalview/gui/FeatureSettings.java | 12 ++++++------ src/jalview/gui/Jalview2XML.java | 14 +++++++------- src/jalview/io/FeaturesFile.java | 10 +++++----- 4 files changed, 35 insertions(+), 34 deletions(-) diff --git a/src/jalview/gui/FeatureRenderer.java b/src/jalview/gui/FeatureRenderer.java index 2db75bf..0aee327 100755 --- a/src/jalview/gui/FeatureRenderer.java +++ b/src/jalview/gui/FeatureRenderer.java @@ -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 diff --git a/src/jalview/gui/FeatureSettings.java b/src/jalview/gui/FeatureSettings.java index 35690a9..1928382 100755 --- a/src/jalview/gui/FeatureSettings.java +++ b/src/jalview/gui/FeatureSettings.java @@ -714,13 +714,13 @@ public class FeatureSettings extends JPanel PrintWriter out = new PrintWriter(new OutputStreamWriter( new FileOutputStream(choice), "UTF-8")); - Enumeration e = fr.featureColours.keys(); + Iterator e = fr.featureColours.keySet().iterator(); float[] sortOrder = new float[fr.featureColours.size()]; String[] sortTypes = new String[fr.featureColours.size()]; int i = 0; - while (e.hasMoreElements()) + while (e.hasNext()) { - sortTypes[i] = e.nextElement().toString(); + sortTypes[i] = e.next().toString(); sortOrder[i] = fr.getOrder(sortTypes[i]); i++; } @@ -1134,13 +1134,13 @@ public class FeatureSettings extends JPanel if (fr.featureGroups != null) { - Enumeration en = fr.featureGroups.keys(); + Iterator en = fr.featureGroups.keySet().iterator(); gps = new String[fr.featureColours.size()]; int g = 0; boolean valid = false; - while (en.hasMoreElements()) + while (en.hasNext()) { - String gp = (String) en.nextElement(); + String gp = (String) en.next(); Boolean on = (Boolean) fr.featureGroups.get(gp); if (on != null && on.booleanValue()) { diff --git a/src/jalview/gui/Jalview2XML.java b/src/jalview/gui/Jalview2XML.java index 14650a9..45bab7c 100644 --- a/src/jalview/gui/Jalview2XML.java +++ b/src/jalview/gui/Jalview2XML.java @@ -1162,11 +1162,11 @@ public class Jalview2XML } // Make sure we save none displayed feature settings - Enumeration en = ap.seqPanel.seqCanvas.getFeatureRenderer().featureColours - .keys(); - while (en.hasMoreElements()) + Iterator en = ap.seqPanel.seqCanvas.getFeatureRenderer().featureColours + .keySet().iterator(); + while (en.hasNext()) { - String key = en.nextElement().toString(); + String key = en.next().toString(); if (settingsAdded.contains(key)) { continue; @@ -1187,11 +1187,11 @@ public class Jalview2XML fs.addSetting(setting); settingsAdded.addElement(key); } - en = ap.seqPanel.seqCanvas.getFeatureRenderer().featureGroups.keys(); + en = ap.seqPanel.seqCanvas.getFeatureRenderer().featureGroups.keySet().iterator(); Vector groupsAdded = new Vector(); - while (en.hasMoreElements()) + while (en.hasNext()) { - String grp = en.nextElement().toString(); + String grp = en.next().toString(); if (groupsAdded.contains(grp)) { continue; diff --git a/src/jalview/io/FeaturesFile.java b/src/jalview/io/FeaturesFile.java index 2ac0e13..23723c7 100755 --- a/src/jalview/io/FeaturesFile.java +++ b/src/jalview/io/FeaturesFile.java @@ -92,7 +92,7 @@ public class FeaturesFile extends AlignFile * @return true if features were added */ public boolean parse(AlignmentI align, - Hashtable colours, boolean removeHTML, boolean relaxedIdMatching) + Map colours, boolean removeHTML, boolean relaxedIdMatching) { return parse(align, colours, null, removeHTML, relaxedIdMatching); } @@ -105,8 +105,8 @@ public class FeaturesFile extends AlignFile * @param removeHTML - process html strings into plain text * @return true if features were added */ - public boolean parse(AlignmentI align, Hashtable colours, - Hashtable featureLink, boolean removeHTML) + public boolean parse(AlignmentI align, Map colours, + Map featureLink, boolean removeHTML) { return parse(align, colours, featureLink, removeHTML, false); } @@ -122,7 +122,7 @@ public class FeaturesFile extends AlignFile * @return true if features were added */ public boolean parse(AlignmentI align, - Hashtable colours, Hashtable featureLink, boolean removeHTML, boolean relaxedIdmatching) + Map colours, Map featureLink, boolean removeHTML, boolean relaxedIdmatching) { String line = null; @@ -136,7 +136,7 @@ public class FeaturesFile extends AlignFile StringTokenizer st; SequenceFeature sf; String featureGroup = null, groupLink = null; - Hashtable typeLink = new Hashtable(); + Map typeLink = new Hashtable(); /** * when true, assume GFF style features rather than Jalview style. */ -- 1.7.10.2