继承callable接口,实现call()方法
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
public class ThreadUtil implements Callable<List>{
private List result = new ArrayList();
/**
*
* @param cls 需要执行的类
* @param methodName 需要执行的方法
* @param t 方法的参数类型
* @param object 方法参数
*/
public ThreadUtil(Class<?> cls,String methodName,Class<?>[] t,Object... object){
try {
//需要执行的类
Object obj = cls.newInstance();
//需要执行的方法
Method method = cls.getMethod(methodName,t);
//执行方法
result.add(method.invoke(obj,object));
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public List call() throws Exception {
return result;
}
}
再写一个类,建个main()方法调用
public static void main(String[] args) {
try {
List res = new ArrayList();
String name1 = "lili";
String name2 = "xxxx";
String name3 = "aoao";
Integer age = 2;
Person p = new Person();
// p.setContent(name1);
p.setAge(1);
Class[] classes = {String.class,Integer.class};
List list = new ArrayList();
list.add(new ThreadUtil(User.class,"say",classes,name1,age));
// p.setContent(name2);
list.add(new ThreadUtil(User.class,"say",classes,name2,3));
// p.setContent(name3);
list.add(new ThreadUtil(User.class,"say",classes,name3,4));
ExecutorService executorService = Executors.newFixedThreadPool(10);
List<Future<List>> futures = executorService.invokeAll(list);
if(futures!=null && futures.size()>0){
for (Future<List> future:futures){
res.addAll(future.get());
}
}
executorService.shutdown();//关闭线程池
for(Object object : res){
System.out.println(object);
}
} catch (Exception e) {
e.printStackTrace();
}
}