public class GroupPictureRenderer {
private PictureRenderer renderer;
private PictureDisplayer displayer;
...
public Picture[] render(final byte[][] rawPictures)
throws InterruptedException {
Thread workers[] = new Thread[rawPictures.length];
final Picture results[] = new Picture[rawPictures.length];
// start one thread per rendering sub-task
for (int ii = 0; ii < rawPictures.length; ii++) { final int i = ii; // capture ii for each new thread
Runnable work = new Runnable() {
public void run() {
results[i] = renderer.render(rawPictures[i]);
displayer.display(results[i]);
}
};
workers[i] = new Thread(work, "Renderer");
workers[i].start();
}
// all threads are running; now wait for them all to finish
for (int i = 0; i < workers.length; i++)
workers[i].join();
// give all the finished pictures to the caller, too:
return results;
}
}
|