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()) {
            }

//然后我有一个运行(),它基本上是读/写文件。这是一个好方法吗,有什么我可以做的让它变得更好。

4

1 回答 1

0

除了繁忙的等待问题,已经在评论中解释过,代码没有明显的问题。因此,正如您所说,鉴于它工作正常,请问自己:是否需要更改它?您希望通过更改代码来改进哪些方面?

出乎意料的一些提示可以给你一些想法:

  • 创建 ExecutorService 是一个相当重量级的操作。但是您可以创建一次单一服务(例如在应用程序启动时)并在整个应用程序运行时重用它。

  • 如果您想将工作移出异步任务或从异步任务中收集结果,请考虑实现Callable<T>接口而不是Runnable/Thread并使用executor.submit(...). 它将返回 a Future<T>,它会在异步任务完成后立即保存结果。

于 2013-10-04T10:25:11.787 回答