import java.util.List; /** * Generic example of master/worker program. * "Tasks" just consist of sleeping for a specified time; times to wait are * generatedly randomly from 1 to a specified maximum. * * Command-line arguments: total tasks, maximum task time, * (optional) "--verbose" for verbose output * * Sequential version. */ public class MasterWorkerSeq { /** * Main method. */ public static void main(String[] args) { String usageMessage = "parameters: numTasks maxTaskTime [--verbose]"; final int REQUIRED_PARMS = 2; int numTasks = 0; int maxTaskTime = 0; boolean verbose = false; /* process command-line arguments */ if (args.length < REQUIRED_PARMS) { System.err.println(usageMessage); System.exit(1); } try { numTasks = Integer.parseInt(args[0]); maxTaskTime = Integer.parseInt(args[1]); } catch (NumberFormatException e) { System.err.println(usageMessage); System.exit(1); } if (args.length > REQUIRED_PARMS) { if (args[REQUIRED_PARMS].equals("--verbose")) verbose = true; else { System.err.println(usageMessage); System.exit(1); } } /* do processing */ new MasterWorkerSeq(numTasks, maxTaskTime, verbose); } /** Constructor (actually where processing occurs too). */ public MasterWorkerSeq(int numTasks, int maxTaskTime, boolean verbose) { int totalTaskTime = 0; /* start timing */ long startTime = System.currentTimeMillis(); /* build list of tasks */ List taskList = FakeTasks.randomTasks(numTasks, maxTaskTime); /* process tasks */ for (FakeTasks.Task t : taskList) { totalTaskTime += t.time; FakeTasks.TaskResult tr = t.execute(); if (verbose) { System.out.printf("%s\n", FakeTasks.toString(t, tr)); } } /* end timing and print result */ long endTime = System.currentTimeMillis(); System.out.printf("\nsequential version\n"); System.out.printf("number of tasks = %d\n", numTasks); System.out.printf("max task time = %d\n", maxTaskTime); System.out.printf("total task time = %d\n", totalTaskTime); System.out.printf("running time = %g\n", (double) (endTime - startTime) / 1000); } }