public void execute() throws ParallelMethodException {
		//Keeps track of spawned threads
		final Thread[] threads = new Thread[parallelBlocks.size()];
		int idx = -1;
		//spawn each parallel set of serialMethods
		for (ArrayList<SerialMethod> block : parallelBlocks) {
			threads[++idx] = getThread(block);
			threads[idx].start();
			if (debug) System.err.print("[+T" + idx + "]");
		}
		//wait for all threads to finish
		int idx2 = -1;
		for (Thread thread : threads) {
			try {
				idx2++;
				thread.join();
				if (debug) System.err.print("[-T" + idx2 + "]");
			} catch (InterruptedException e) {
				if (debug) System.err.print("[xT" + idx2 + "]");
				addExcep(thread.getName(), e);
			}
		}
		
		// if execution style was EXCEP, then throw an exception
		if (remainingMethods > 0 && ON_EXCEP.EXCEP.equals(stopOnExcep)) {
			throw new ParallelMethodException("Exception while processing methods (Remaining: " + remainingMethods + ")");
		}
	}