21 package org.matsim.core.replanning.modules;
23 import org.apache.logging.log4j.LogManager;
24 import org.apache.logging.log4j.Logger;
32 import java.lang.Thread.UncaughtExceptionHandler;
33 import java.util.LinkedList;
34 import java.util.List;
35 import java.util.concurrent.atomic.AtomicReference;
67 private String
name = null;
71 private final AtomicReference<Throwable>
hadException =
new AtomicReference<>(null);
102 this.beforePrepareReplanningHook(replanningContextTmp);
110 this.afterPrepareReplanningHook(replanningContextTmp);
140 log.info(
"[" + this.
name +
"] starting " + this.
threads.length +
" threads, handling " +
this.count +
" plans");
143 for (Thread thread : this.
threads) {
149 for (Thread thread : this.threads) {
152 }
catch (InterruptedException e) {
155 log.info(
"[" + this.
name +
"] all " + this.threads.length +
" threads finished.");
157 if (throwable != null) {
158 throw new RuntimeException(
"Some threads crashed, thus not all plans may have been handled.", throwable);
184 this.
name = algo.getClass().getSimpleName();
185 counter =
new Counter(
"[" + this.
name +
"] handled plan # ");
188 Thread thread =
new Thread(algothread, this.
name +
"." + i);
195 final int getNumOfThreads() {
209 log.error(
"Thread " + t.getName() +
" died with exception. Will stop after all threads finished.", e);
210 this.hadException.set(e);
218 private final List<Plan> plans =
new LinkedList<>();
222 this.planAlgo = algo;
223 this.counter = counter;
227 this.plans.add(plan);
232 for (
Plan plan : this.plans) {
233 this.planAlgo.
run(plan);
AbstractMultithreadedModule(final int numOfThreads)
final ExceptionHandler exceptionHandler
PlanAlgoThread [] algothreads
void beforeFinishReplanningHook()
AbstractMultithreadedModule(GlobalConfigGroup globalConfigGroup)
final AtomicReference< Throwable > hadException
void handlePlan(Plan plan)
abstract PlanAlgorithm getPlanAlgoInstance()
PlanAlgoThread(final PlanAlgorithm algo, final Counter counter)
void addPlanToThread(final Plan plan)
void uncaughtException(Thread t, Throwable e)
ReplanningContext replanningContext
ExceptionHandler(final AtomicReference< Throwable > hadException)
final PlanAlgorithm planAlgo
final AtomicReference< Throwable > hadException
abstract void run(Plan plan)
final ReplanningContext getReplanningContext()
void prepareReplanning(ReplanningContext replanningContext)
void afterFinishReplanningHook()