私のプログラムでは、たくさんの写真の配列リストを繰り返し処理し、それらの外観や画像の種類を変更したり、それらをディスクに書き込みます。私の質問は、複数のスレッドを追加して画像を処理したり、画像を保存したりすることです。もしそうなら、何が最良の方法でしょうか。 ArrayList images = new ArrayList(); // 500以上の画像 ArrayList paths = new ArrayList(); int len = images.size();もっと多くのスレッドを追加すると私のプログラムのパフォーマンスが向上する
for (int i =0; i < len ; i ++)
{
BufferedImage image = process (images.get(i))//takes about a second
ImageIO.write(image, "jpg", new File(getImagePaths().get(i)));
}
あなたが改善しようとしているコードのサンプルは、コミュニティが助けることができる確率を高めます。 :)あなたの記述に基づいて、それは複数のスレッドが助けにならない場合のディスクI/Oかもしれません。パフォーマンスのボトルネックがどこにあるかを判断するためにアプリのプロファイリングを試しましたか? –
あなたがプロセスをCPUに束縛しているとすれば、 'Runtime.availableProcessors()'と 'execute()'のコアと同じ数のスレッドを持つ 'Executors.newFixedThreadPool'を使うでしょう。 –
@GregHewgillもし私たちが彼らから遠ざかっていたら、私たちはそれらをどうやって学ぶのですか? – Skeptor