in harry-core/src/harry/runner/Runner.java [267:291]
public void runInternal() throws Throwable
{
List<Interruptible> threads = new ArrayList<>();
WaitQueue queue = WaitQueue.newWaitQueue();
WaitQueue.Signal interrupt = queue.register();
for (Configuration.VisitorPoolConfiguration poolConfiguration : poolConfigurations)
{
for (int i = 0; i < poolConfiguration.concurrency; i++)
{
Visitor visitor = poolConfiguration.visitor.make(run);
String name = String.format("%s-%d", poolConfiguration.prefix, i + 1);
Interruptible thread = ExecutorFactory.Global.executorFactory().infiniteLoop(name, wrapInterrupt((state) -> {
if (state == Interruptible.State.NORMAL)
visitor.visit();
}, interrupt::signal, errors::add), SAFE, NON_DAEMON, UNSYNCHRONIZED);
threads.add(thread);
}
}
interrupt.await(runtime, runtimeUnit);
shutdown(threads::stream);
if (!errors.isEmpty())
throw merge(errors);
}