public static void main(String[] args) throws IOException,
            InstantiationException, IllegalAccessException, InterruptedException, ExecutionException {
        System.out.println("Running benchmark. Press any key to continue.");
        System.in.read();

        Map<Class<?>, Map<String, String>> keyLookupClasses = new LinkedHashMap<Class<?>, Map<String, String>>();

        //Map<String, String> hashMapKeyValueConfiguration = new HashMap<String, String>();
        //keyLookupClasses.put(HashMapKeyValueLookup.class,
        //        hashMapKeyValueConfiguration);
        
        Map<String, String> concurrentHashMapKeyValueConfiguration = new HashMap<String, String>();
        keyLookupClasses.put(ConcurrentHashMapKeyValueLookup.class,
                concurrentHashMapKeyValueConfiguration);

        Map<String, String> memcachedKeyValueConfiguration = new HashMap<String, String>();
        keyLookupClasses.put(MemcachedKeyValueLookup.class,
                memcachedKeyValueConfiguration);

        Map<String, String> mySQLKeyValueLookupConfiguration = new HashMap<String, String>();
        keyLookupClasses.put(MySQLKeyValueLookup.class,
                mySQLKeyValueLookupConfiguration);

        ExecutorService executor = Executors.newFixedThreadPool(POOL_SIZE);
        for (Entry<Class<?>, Map<String, String>> clazzEntry : keyLookupClasses
                .entrySet()) {
            final KeyValueLookup keyValueLookup = (KeyValueLookup) clazzEntry
                    .getKey().newInstance();
            keyValueLookup.init(clazzEntry.getValue());
            benchmark(keyValueLookup, executor);
            keyValueLookup.cleanup();

        }
        executor.shutdown();

    }