java 多线程处理一个list的集合

来源:互联网 发布:数据库系统的三级模式 编辑:程序博客网 时间:2024/05/22 12:03
import java.util.ArrayList;import java.util.List;import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;public class App {public static final String module = App.class.getName();public static void main(String[] args) {try {List<String> list = new ArrayList<>();for (int i = 0; i < 100; i++) {list.add(i + ",");}System.out.println(new App().list2Str(list, 5));} catch (Exception e) {e.printStackTrace();}}public String list2Str(List<String> list, final int nThreads)throws Exception {if (list == null || list.isEmpty()) {return null;}StringBuffer ret = new StringBuffer();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 = list.subList(size / nThreads * i, size/ nThreads * (i + 1));Callable<String> task = new Callable<String>() {@Overridepublic String call() throws Exception {StringBuffer sb = new StringBuffer();for (String str : subList) {sb.append(str);}return sb.toString();}};futures.add(executorService.submit(task));}for (Future<String> future : futures) {ret.append(future.get());}executorService.shutdown();return ret.toString();}<span id="transmark"></span>}


0 0
原创粉丝点击