记录一个java多线程的使用

来源:互联网 发布:js是什么端语言 编辑:程序博客网 时间:2024/06/06 18:10
public List<String> listThreads(List<String> list, final int nThreads ) {final List<String> fileList = new ArrayList<>();if (list == null || list.isEmpty()) {return null;}//long start = System.currentTimeMillis();int size = list.size();ExecutorService executorService = Executors.newFixedThreadPool(nThreads); // 异步多线程List<Future<String>> futures = new ArrayList<Future<String>>(nThreads);for (int i = 0; i < nThreads; i++) {// 修改多线程少数据的问题,多余的数据由最后一个线程处理final List<String> subList;if (i == (nThreads - 1)) {subList = list.subList(size / nThreads * i, size);} else {subList = list.subList(size / nThreads * i, size / nThreads * (i + 1));}Callable<String> task = new Callable<String>() {public String call() throws Exception {int size = 0;for (String str : subList) {size++;// 执行的代码Thread.sleep(200);// System.out.println(size*nThreads+"/");}return String.valueOf(size);}};futures.add(executorService.submit(task));}//for (Future<String> future : futures) {// ret.append(future.get()); 获得返回结果// ret.length(future.get());//}executorService.shutdown();while (true) {if (executorService.isTerminated()) {//System.out.println("执行完毕,用时  " + String.valueOf((System.currentTimeMillis() - start) / 1000) + " 秒 !");//FileNamesAndNumber.getFileNamesAndNumber(ApiTestManagerForThread.pathname);break;}try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("多线程执行结束");return fileList;}

原创粉丝点击