-1

ファイル配列の for each ループがあります。ファイルごとに、一般的な特定の操作が実行されます。処理するファイルがたくさんあり、時間がかかります。Java スレッドがより高いパフォーマンスを達成するのに役立つかどうかを考えていました。私はJavaスレッドプログラミングが初めてです。必要なヘルプ

4

2 に答える 2

2

FileReader クラスに単一のファイルを処理するためのロジックが含まれているとします。

public class FileReader implements Runnable {

String fileName;

public FileReader(String fileName) {
   this.fileName = fileName;
}

public void run() {

 processFile(fileName);

}

private void processFile(String fileName) {
  // Your logic of processing the file.
}

}

次に、次のコードを追加して、ディレクトリ内のファイルを処理します

システムリソースをエレガントに使用するために、常にスレッドプールを使用する必要があります

private static final int THREAD_COUNT = 10;
private static final ThreadPoolExecutor pool = new ThreadPoolExecutor(
        THREAD_COUNT, THREAD_COUNT, 10, TimeUnit.SECONDS,
        new LinkedBlockingQueue<Runnable>());

処理したいファイルごとに

  FileReader reader = new FileReader(file.getAbsolutePath());
  pool.execute(reader);
于 2012-08-07T19:00:15.593 に答える
1

それは、各ファイルに対して何をしなければならないか、および処理のボトルネックがどこにあるかに大きく依存します。処理が CPU バウンドの場合 (ファイルから読み取ったデータに対して多くの計算を行う必要があります)、より多くのスレッドを作成してから、それらを実行する CPU コアを用意しても役に立ちません。

一方、処理が「ファイル データをサーバーに送信し、応答を待機する」ようなものであり、要求を同時に送信してもサーバーの速度が低下しない場合は、ファイルごとにスレッドが役立つ場合があります。

処理に含まれる内容について詳しく知らなければ、特定の推奨事項を実際に提示することはできません。

于 2012-08-07T18:22:03.253 に答える