use of org.cactoos.scalar.And in project cactoos by yegor256.
the class RunsInThreads method matchesSafely.
@Override
public boolean matchesSafely(final Func<T, Boolean> func) {
final ExecutorService service = Executors.newFixedThreadPool(this.total);
final CountDownLatch latch = new CountDownLatch(1);
final Collection<Future<Boolean>> futures = new ArrayList<>(this.total);
final Callable<Boolean> task = () -> {
latch.await();
return func.apply(this.input);
};
for (int thread = 0; thread < this.total; ++thread) {
futures.add(service.submit(task));
}
latch.countDown();
final boolean matches = new UncheckedScalar<>(new And((Func<Future<Boolean>, Boolean>) Future::get, futures)).value();
service.shutdown();
return matches;
}
Aggregations