将list拆分后多线程执行
还没想到怎么将线程池提取出来,使用异步.有大佬可以指点一下
// An highlighted block
package com.test.test;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class testecharts {
public static <T> List<List<T>> averageAssign(List<T> source,int n){
List<List<T>> result=new ArrayList<List<T>>();
int remaider=source.size()%n; //(先计算出余数)
int number=source.size()/n; //然后是商
int offset=0;//偏移量
for(int i=0;i<n;i++){
List<T> value=null;
if(remaider>0){
value=source.subList(i*number+offset, (i+1)*number+offset+1);
remaider--;
offset++;
}else{
value=source.subList(i*number+offset, (i+1)*number+offset);
}
result.add(value);
}
return result;
}
public static void main(String[] args) {
ExecutorService es = Executors.newFixedThreadPool(3);
List<Integer> integers=new ArrayList<>();
integers.add(1);
integers.add(2);
integers.add(3);
integers.add(4);
integers.add(5);
integers.add(6);
integers.add(7);
integers.add(8);
integers.add(9);
integers.add(10);
integers.add(11);
integers.add(12);
integers.add(13);
integers.add(14);
integers.add(15);
System.out.println(integers);
List<List<Integer>> lists=averageAssign(integers, 6);
for (int j = 0; j <lists.size(); j++) {
List<Integer> lisrrr=lists.get(j);
if(lisrrr!=null) {
es.execute(new Runnable() {
@Override
public void run() {
try {
System.out.println(lisrrr);
System.err.println(Thread.currentThread().getName());
Thread.sleep(30000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}
}
}