private void runAll(Thread[] threads) {
        for (Thread t : threads) {
            t.start();
        }
        for (Thread t : threads) {
            try {
                t.join();
            } catch (InterruptedException e) {
                // nop
            }
        }
    }
This just bangs on a shared to give some sort of lower bound for time
elapsed.
vespajlib/developernotes/ThreadLocalDirectoryBenchmark.java