考虑这样一个问题:统计某个工程的代码行数。首先想到的思路便是,递归文件树,每层递归里,循环遍历父文件夹下的所有子文件,如果子文件是文件夹,那么再对这个文件夹进行递归调用。于是问题很轻松的解决了。这个方案可以优化吗? 了
再回想这个问题,可以发现,循环里的递归调用其实相互之间是独立的,互不干扰,各自统计自己路径下的代码文件的行数。于是,发现了这个方案的可优化点——利用线程池进行并行处理。于是一个串行的求解方案被改进成了并行方案。
不能光说不练,写了一个Demo,对串行方案和并行方案进行了量化对比。代码如下:
import java.io.*;import java.util.Queue;import java.util.concurrent.*;/** * Created by cdlvsheng on 2016/5/16. */public class ParallelSequentialContrast { int coreSize = Runtime.getRuntime().availableProcessors(); ThreadPoolExecutor exec = new ThreadPoolExecutor(coreSize * 4, coreSize * 5, 0, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(10000), new ThreadPoolExecutor.CallerRunsPolicy()); Queue<Future<Integer>> queue = new ConcurrentLinkedQueue<Future<Integer>>(); private