private Thread getThread(final ArrayList<SerialMethod> serialMethodList) {
		final Thread t = new Thread(
	            new Runnable() {
					public void run() {
						int remainingMethods = serialMethodList.size(); //track remaining number of methods to process
						// Execute all methods serially
						for (SerialMethod serialMethodObj : serialMethodList) {
							try {
								/* 
								 * Invoke the method and capture the return object (if any)
								 * Note that a new instance is created for every method call if an object instance was not already specified.
								 * Since this framework should be used for long running methods, instantiating
								 * a few extra objects should not be an issue. 
								 */
								final Object obj = serialMethodObj.serialMethod.invoke(
										serialMethodObj.serialObjInst == null ? serialMethodObj.serialClass.newInstance() : serialMethodObj.serialObjInst, 
										serialMethodObj.methodParams);

								//decrement the num of methods remaining
								remainingMethods--;
								
								// Save the return object
								if (void.class != serialMethodObj.serialMethod.getReturnType()) {
									addReturn(serialMethodObj.serialName, obj);
								}
							} catch (Exception e) {
								//IllegalArgumentException
								//IllegalAccessException
								//InvocationTargetException
								//InstantiationException
								addExcep(serialMethodObj.serialName, e);
								
								//check if remaining methods should stop processing if excep occurs
								if (ON_EXCEP.STOP.equals(stopOnExcep) || ON_EXCEP.EXCEP.equals(stopOnExcep)) {
									addRemaining(remainingMethods);
									break;
								}
							}
						}
	                }
	            });
		return t;
	}