public boolean run(File path1, File path2, File outputDir, String prefix)
	{
		long start = System.currentTimeMillis();	    
		
		// is any pdf pair different
		foundDifference = false;
		
		// get all pdf pairs
		Set<PDFInfoHolder> pdfInfoHolders = PDFCorpusAnalyser.getSimplePDFInfoHolders(path1, path2, prefix);

		// start 4 different tasks at the same time
		JobQueue queue = new JobQueue(PARALLEL_JOBS);
		for (PDFInfoHolder pdfInfoHolder : pdfInfoHolders) 
		{    
			CompareJob compareJob = new CompareJob(outputDir, pdfInfoHolder);
			compareJob.addJobListener(this);
			queue.addJob(compareJob);
		}
		
		// waiting for all jobs to be finished
        while (queue.hasJobs()) {
            try {
                synchronized (queue) {
                    queue.wait();
                }
            } catch (InterruptedException e) {
            	log.error("Interrupted while waiting for jobs to finish", e);
            }
        }
		
		long end = System.currentTimeMillis();
		log.info("Execution time: "+ (end-start)+"ms");
		
		return foundDifference;
	}