@Test
    @Ignore
    public final void test16Threads() throws InterruptedException {
        List<Thread> threads = new ArrayList<>(16);
        List<Bench> benches = createBenches(8, new VespajlibFactory(), new JacksonFactory());

        for (Bench bench : benches) {
            threads.add(new Thread(bench));
        }
        for (Thread t : threads) {
            t.start();
        }
        for (Thread t : threads) {
            t.join();
        }

        System.out.println("8 Jackson threads competing with 8 VespaJLib threads.");
        metrics(benches, Strategy.JACKSON);
        metrics(benches, Strategy.VESPAJLIB);
    }
Object identity is used to differentiate between different implementation strategies, toString() is used to print a report.

@return an object with a descriptive toString() for the implementation under test
vespajlib/src/test/java/com/yahoo/text/JsonMicroBenchmarkTestCase.java