On Feb 11, 2014, at 11:27 AM, Lucas Branisso <[log in to unmask]> wrote: > What I did was to write a function that create a pool of threads (using Java's ExecutorService) and submit each simulation as job for the thread pool. You could also hijack ParallelSequence. Consider the following standard "simple" MASON loop: public static void main(String[] args) { int jobs = 100; // let’s do 100 runs long maxsteps = 5000; int numCores = 4; // how many cores do I want to use at one time long seed = System.currentTimeMillis(); SimState state = new MyModel(seed); for(int job = 0; job < jobs; job++) { state.setJob(job); state.start(); do if (!state.schedule.step(state)) break; while(state.schedule.getSteps() < maxsteps); state.finish(); } System.exit(0); } You could do it this way to make it multithreaded (I just whipped this up, dunno if it even compiles): public static void main(String[] args) { int jobs = 100; // let’s do 100 runs long maxsteps = 5000; int numCores = 4; // how many cores do I want to use at one time final long seed = System.currentTimeMillis(); final Steppable[] steps = new Steppable[jobs]; for(int i = 0; i < jobs; i++) { final int job = i; steps[job] = new Steppable() { public void step(SimState s) // s will be null, ignore { MyModel state = new MyModel(seed + job); state.setJob(job); state.start(); do if (!state.schedule.step(state)) break; while(state.schedule.getSteps() < maxsteps); state.finish(); } }; } ParallelSequence p = new ParallelSequence(steps, jobs); p.step(null); p.cleanup(); System.exit(0); }