@Test
    void validatePersonDirConcurrency() throws Throwable {
        val userList = IntStream.range(0, NUM_USERS).mapToObj(i -> "user_" + i)
            .collect(Collectors.toList());

        val runnables = userList.stream().map(user -> new PersonAttrGetter(personDirectoryResolver, user))
            .collect(Collectors.toCollection(() -> new ArrayList<CheckedRunnable>()));
        assertConcurrent("Getting persons", runnables, 600);
    }
Assert a list of runnables can run in parallel without any concurrency related exceptions.
Use CountDownLatch to start all threads at same time and wait for them to finish.

@param message           error message
@param runnables         list of runnables
@param maxTimeoutSeconds timeout for test completion
@throws InterruptedException interruption
support/cas-server-support-person-directory/src/test/java/org/apereo/cas/PersonDirectoryPrincipalResolverConcurrencyTests.java