X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fworkers%2FAlignCalcManager.java;h=79ca8632e376052ca14249a61b557504021a4d25;hb=6a6fb5010c2cd06b14a1e055eabaeb4848e65d2d;hp=19673753ac029aa1b83fc4551c6191a605a1a650;hpb=b13d4ee2f7839be680d23ce157aff4e204377a8f;p=jalview.git diff --git a/src/jalview/workers/AlignCalcManager.java b/src/jalview/workers/AlignCalcManager.java index 1967375..79ca863 100644 --- a/src/jalview/workers/AlignCalcManager.java +++ b/src/jalview/workers/AlignCalcManager.java @@ -27,6 +27,7 @@ import jalview.datamodel.AlignmentAnnotation; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; import java.util.List; @@ -38,45 +39,33 @@ public class AlignCalcManager implements AlignCalcManagerI /* * list of registered workers */ - private volatile List restartable; + private final List restartable = Collections + .synchronizedList(new ArrayList()); /* * types of worker _not_ to run (for example, because they have * previously thrown errors) */ - private volatile List> blackList; + private final List> blackList = Collections + .synchronizedList(new ArrayList>()); /* * global record of calculations in progress */ - private volatile List inProgress; + private final List inProgress = Collections + .synchronizedList(new ArrayList()); /* * record of calculations pending or in progress in the current context */ - private volatile Map, List> updating; + private final Map, List> updating = + new Hashtable, List>(); /* * workers that have run to completion so are candidates for visual-only * update of their results */ - private HashSet canUpdate; - - /** - * Constructor - */ - public AlignCalcManager() - { - restartable = Collections - .synchronizedList(new ArrayList()); - blackList = Collections.synchronizedList( - new ArrayList>()); - inProgress = Collections - .synchronizedList(new ArrayList()); - updating = Collections.synchronizedMap( - new Hashtable, List>()); - canUpdate = new HashSet<>(); - } + private HashSet canUpdate = new HashSet<>();; private static boolean listContains(List upd, AlignCalcWorkerI worker) @@ -92,7 +81,7 @@ public class AlignCalcManager implements AlignCalcManagerI return false; } @Override - public void notifyStart(AlignCalcWorkerI worker) + public void notifyStarted(AlignCalcWorkerI worker) { synchronized (updating) { @@ -126,22 +115,10 @@ public class AlignCalcManager implements AlignCalcManagerI @Override public boolean isPending(AlignCalcWorkerI workingClass) { - List upd; synchronized (updating) { - upd = updating.get(workingClass.getClass()); - if (upd == null) - { - return false; - } - synchronized (upd) - { - if (upd.size() > 1) - { - return true; - } - } - return false; + List upd = updating.get(workingClass.getClass()); + return upd != null && upd.size() > 1; } } @@ -204,7 +181,15 @@ public class AlignCalcManager implements AlignCalcManagerI { if (!isDisabled(worker)) { - Thread tw = new Thread(worker); + Thread tw = new Thread(() -> { + try + { + worker.run(); + } catch (Exception e) + { + e.printStackTrace(); + } + }); tw.setName(worker.getClass().toString()); tw.start(); } @@ -332,7 +317,7 @@ public class AlignCalcManager implements AlignCalcManagerI } @Override - public void removeRegisteredWorkersOfClass( + public void removeWorkersOfClass( Class typeToRemove) { List removable = new ArrayList<>();