Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 210757
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T18:02:02+00:00 2026-05-11T18:02:02+00:00

I have a Java program that runs many small simulations. It runs a genetic

  • 0

I have a Java program that runs many small simulations. It runs a genetic algorithm, where each fitness function is a simulation using parameters on each chromosome. Each one takes maybe 10 or so seconds if run by itself, and I want to run a pretty big population size (say 100?). I can’t start the next round of simulations until the previous one has finished. I have access to a machine with a whack of processors in it and I’m wondering if I need to do anything to make the simulations run in parallel. I’ve never written anything explicitly for multicore processors before and I understand it’s a daunting task.

So this is what I would like to know: To what extent and how well does the JVM parallel-ize? I have read that it creates low level threads, but how smart is it? How efficient is it? Would my program run faster if I made each simulation a thread? I know this is a huge topic, but could you point me towards some introductory literature concerning parallel processing and Java?

Thanks very much!

Update:
Ok, I’ve implemented an ExecutorService and made my small simulations implement Runnable and have run() methods. Instead of writing this:

Simulator sim = new Simulator(args); 
sim.play(); 
return sim.getResults(); 

I write this in my constructor:

ExecutorService executor = Executors.newFixedThreadPool(32);

And then each time I want to add a new simulation to the pool, I run this:

RunnableSimulator rsim = new RunnableSimulator(args); 
exectuor.exectue(rsim); 
return rsim.getResults(); 

The RunnableSimulator::run() method calls the Simulator::play() method, neither have arguments.

I think I am getting thread interference, because now the simulations error out. By error out I mean that variables hold values that they really shouldn’t. No code from within the simulation was changed, and before the simulation ran perfectly over many many different arguments. The sim works like this: each turn it’s given a game-piece and loops through all the location on the game board. It checks to see if the location given is valid, and if so, commits the piece, and measures that board’s goodness. Now, obviously invalid locations are being passed to the commit method, resulting in index out of bounds errors all over the place.

Each simulation is its own object right? Based on the code above? I can pass the exact same set of arguments to the RunnableSimulator and Simulator classes and the runnable version will throw exceptions. What do you think might cause this and what can I do to prevent it? Can I provide some code samples in a new question to help?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-11T18:02:02+00:00Added an answer on May 11, 2026 at 6:02 pm

    Java Concurrency Tutorial

    If you’re just spawning a bunch of stuff off to different threads, and it isn’t going to be talking back and forth between different threads, it isn’t too hard; just write each in a Runnable and pass them off to an ExecutorService.

    You should skim the whole tutorial, but for this particular task, start here.

    Basically, you do something like this:

    ExecutorService executorService = Executors.newFixedThreadPool(n);
    

    where n is the number of things you want running at once (usually the number of CPUs). Each of your tasks should be an object that implements Runnable, and you then execute it on your ExecutorService:

    executorService.execute(new SimulationTask(parameters...));
    

    Executors.newFixedThreadPool(n) will start up n threads, and execute will insert the tasks into a queue that feeds to those threads. When a task finishes, the thread it was running on is no longer busy, and the next task in the queue will start running on it. Execute won’t block; it will just put the task into the queue and move on to the next one.

    The thing to be careful of is that you really AREN’T sharing any mutable state between tasks. Your task classes shouldn’t depend on anything mutable that will be shared among them (i.e. static data). There are ways to deal with shared mutable state (locking), but if you can avoid the problem entirely it will be a lot easier.

    EDIT: Reading your edits to your question, it looks like you really want something a little different. Instead of implementing Runnable, implement Callable. Your call() method should be pretty much the same as your current run(), except it should return getResults();. Then, submit() it to your ExecutorService. You will get a Future in return, which you can use to test if the simulation is done, and, when it is, get your results.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 186k
  • Answers 186k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer Simple: type TWeekdays = (wdMonday, wdTuesday, wdWednesday, wdThursday, wdFriday); procedure… May 12, 2026 at 5:14 pm
  • Editorial Team
    Editorial Team added an answer At the moment, on iPhone you'll only be sharing memory… May 12, 2026 at 5:14 pm
  • Editorial Team
    Editorial Team added an answer Just create an element with that class name and inspect… May 12, 2026 at 5:14 pm

Related Questions

i have written a java program which currently runs as a desktop app, it
I have a very large app, 1.5 million lines of C++, which is currently
I have inherited some code: Process p = new ProcessBuilder(/bin/chmod, 777, path).start(); p.waitFor(); Basically,
I am a graduate student of physics and I am working on writing some

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.