/**多线程处理大量list
* @param valueList
* @throws InterruptedException
* @throws ExecutionException
*/
public void mutiThreadhandleList(List<String> valueList) throws InterruptedException, ExecutionException {
// 获取核心数
int num = Runtime.getRuntime().availableProcessors();
int size = valueList.size();
// 实际用这个数拆分
int sizeSplit = size/num + num;
List<List<String>> spiltList = PlatformUtils.spiltList(valueList, sizeSplit);
ExecutorService executorService = Executors.newFixedThreadPool(num);
List<Future<List<String>>> futures = new ArrayList<Future<List<String>>>(num);
for (List<String> list : spiltList) {
Callable<List<String>> call = new Callable<List<String>>() {
@Override
public List<String> call() throws Exception {
// do something
List<String> rsList = new ArrayList<String>(list.size());
for (String string : list) {
Thread.sleep(2);
System.out.println(string);
rsList.add(string + "sku");
}
return rsList;
}
};
futures.add(executorService.submit(call));
}
List<String> rsList = new ArrayList<String>();
for (Future<List<String>> future : futures) {
List<String> list = future.get();
rsList.addAll(list);
}
executorService.shutdown();
System.out.println(rsList.size());
}