1

複数のファイルを並行して処理する必要があるという要件があります。

long start = System.currentTimeMillis();
        File [] files=new File("C:\\ftp").listFiles();
        //System.out.println(files.length);
         ExecutorService executor=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
           // System.out.println("available processors.."+Runtime.getRuntime().availableProcessors());
        if(files.length>=1)
        {
            for(int i = 0;i<files.length; i++){
                System.out.println("reading..."+i);
                Runnable workerThread = new FileWorkerThread(files[i]);
               executor.execute(workerThread);
                          }
            executor.shutdown();
            while (!executor.isTerminated()) {
            }

//次に、基本的にファイルの読み取り/書き込みを行う run() があります。これは良いアプローチですか?それを改善するためにできることはありますか?

4

1 に答える 1

0

コメントで既に説明されているビジー待機の問題を除けば、コードに明らかな問題はありません。あなたが言ったように、それが正常に機能することを考えると、次のことを自問してください。それを変更する必要はありますか? コードを変更して改善したい点は何ですか?

あなたにアイデアを与えるためのいくつかのヒントがあります:

  • ExecutorService の作成は、かなり負荷の高い操作です。ただし、単一のサービスを一度 (アプリケーションの開始時など) 作成すれば、アプリケーションのランタイム全体で再利用できます。

  • 非同期タスクから作業を移動したり、非同期タスクから結果を収集したりする場合は、 /のCallable<T>代わりにインターフェイスを実装して使用することを検討してください。非同期タスクが完了するとすぐに結果を保持するを返します。RunnableThreadexecutor.submit(...)Future<T>

于 2013-10-04T10:25:11.787 に答える