Reputation: 2083
I am writing an optimazation algorithm which creates about 100 threads. Currently, I start them all at one time (for-loop) and after that I tell every thread that it should join().
My problem is now that each thread uses to much memory so the heap space exception won't take long. I want some kind of scheduling but don't know how to implement it.
I have something like this in mind: start 10 threads and every time one of these finishes start a new one. So that there are allways running 10 threads at a time until no thread is left.
Has someone an idea or knows how to realize something like this?
Thank you very much and regards from Cologne
Marco
Upvotes: 9
Views: 3799
Reputation: 821
Consider the number of cores in the machine you will be using. Performance will be best if the number of threads you normally have running equals the number of cores. As KLE says, use a thread pool.
Upvotes: 1
Reputation: 9214
Here's an example to get you started. First, what you'll need to import:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
And then what you need to put inside your method:
ExecutorService pool = Executors.newFixedThreadPool(10);
for(final Task task: tasks) {
pool.execute(new Runnable() {
@Override
public void run() {
task.execute();
}
});
}
pool.shutdown();
while(!pool.awaitTermination(1, TimeUnit.SECONDS)) {
System.out.println("Waiting for tasks to shutdown");
}
Some notes about the above:
java.util.concurrent.atomic
are
quite good if you have shared state
you need to update (e.g. if you want
to have a counter for how many tasks
you've processed).Upvotes: 4
Reputation: 24169
Instead of starting a new Thread to do a new task, you are much better off to:
The difference in speed and memory is huge, because you don't have to start and stop a thread for each task.
The package java.util.concurrent explains everything about this. A book would be easier to read though :-(
Upvotes: 2
Reputation: 346377
Use a ThreadPoolExecutor with an appropriate maximum pool size.
Upvotes: 19