Hiya,
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:
- You'll need to implement your own
Task class that actually implements
your algorithm
- The task class doesn't have to just
have an execute method (in fact, if
it has that signature, you could just
get your task to implement Runnable
and avoid the anonymous inner class)
- You'll need to make sure that
everything that you use is properly
synchronised. The classes in
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).
- You typically only want as many
threads executing as there are cores
/ cpus on your machine. Often
performance often goes up when
numbers of threads goes down.
Normally you only use more threads if
your tasks spend a lot of time
blocked.