1. 程式人生 > >java 多執行緒處理一個list的集合

java 多執行緒處理一個list的集合

2016年08月03日 09:16:20

package A;

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 FJTest {

public static final String module

= FJTest.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 FJTest().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>() {

@Override

public 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();

}

}