diff --git a/core/src/main/java/ru/trader/analysis/VendorsGraph.java b/core/src/main/java/ru/trader/analysis/VendorsGraph.java index 13b768e..5847550 100644 --- a/core/src/main/java/ru/trader/analysis/VendorsGraph.java +++ b/core/src/main/java/ru/trader/analysis/VendorsGraph.java @@ -8,7 +8,6 @@ import ru.trader.analysis.graph.Path; import ru.trader.analysis.graph.Vertex; import ru.trader.core.Order; import ru.trader.core.Profile; -import ru.trader.core.TransitVendor; import ru.trader.core.Vendor; import java.util.*; @@ -20,6 +19,7 @@ public class VendorsGraph extends ConnectibleGraph { private final Scorer scorer; private final List deferredTasks = new ArrayList<>(); + private final static int MAX_DEFERRED_TASKS = 5000; public VendorsGraph(Scorer scorer, AnalysisCallBack callback) { super(scorer.getProfile(), callback); @@ -65,6 +65,12 @@ public class VendorsGraph extends ConnectibleGraph { } } + protected boolean canHoldTask(){ + synchronized (deferredTasks){ + return deferredTasks.size() < MAX_DEFERRED_TASKS; + } + } + private void runDeferredTasks(){ deferredTasks.sort((b1,b2) -> Integer.compare(b2.getDeep(), b1.getDeep())); for (VendorsGraphBuilder task : deferredTasks) { @@ -257,7 +263,7 @@ public class VendorsGraph extends ConnectibleGraph { protected void addSubTask(Edge edge, double nextLimit) { Vertex next = edge.getTarget(); if (next.getLevel() >= deep && next.getEntry().isTransit()) { - if (deep > 0){ + if (deep > 0 && canHoldTask()){ VendorsGraphBuilder task = new VendorsGraphBuilder(this, (BuildEdge) edge, set, deep - 1, nextLimit); task.isAdding = true; holdTask(task);