public void start() {
        try {
            ExecutorService executor = Executors.newFixedThreadPool(numbersOfThreads);
            File file = new File(outputPath);
            if (!file.isDirectory()) {
                file.mkdirs();
            }
            
            Calendar start = Calendar.getInstance();
            
            for (int i = 0; i < numbersOfThreads; i++) {
                MultiThreadTestCase obj = (MultiThreadTestCase) testingClass.newInstance();
                obj.setMyName("id" + (i + 1));
                obj.setExecutionTimes(executionTimes);
                obj.setOutputPath(outputPath);
                executor.execute(obj);

            }

            executor.shutdown();
            executor.awaitTermination(1000, TimeUnit.HOURS);
            
            Calendar end = Calendar.getInstance();
            
            System.out.println("execution finished...");
            
            long time = end.getTimeInMillis()-start.getTimeInMillis();
            System.out.println("execution time(seconds): \t"+(time/1000D));
            System.out.println("single thread execution time (seconds): \t"+(time/numbersOfThreads/1000D));
            System.out.println("single process execution time (seconds): \t"+(time/numbersOfThreads/executionTimes/1000D));
            
            
            varify();

        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }