Search in sources :

Example 1 with And

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;
}
Also used : And(org.cactoos.scalar.And) ExecutorService(java.util.concurrent.ExecutorService) ArrayList(java.util.ArrayList) Future(java.util.concurrent.Future) CountDownLatch(java.util.concurrent.CountDownLatch)

Aggregations

ArrayList (java.util.ArrayList)1 CountDownLatch (java.util.concurrent.CountDownLatch)1 ExecutorService (java.util.concurrent.ExecutorService)1 Future (java.util.concurrent.Future)1 And (org.cactoos.scalar.And)1