方法:实现Callable接口
废话不多说,直接上测试代码
1、测试类掉用多线程
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class Test {
public static void main(String[] args) {
try{
List<Future> futureList=new ArrayList<Future>();
// 创建一个执行任务的服务
ExecutorService es = Executors.newFixedThreadPool(5);
for(int i=0;i<100;i++){
TestCallable t=new TestCallable(i);
Future future1 =es.submit(t);
futureList.add(future1);
System.out.println("第"+i+"个线程提交成功");
}
List<String> rs=new ArrayList<String>();
addFuteList(futureList,rs);
// 停止任务执行服务
es.shutdownNow();
for(String str:rs){
System.out.println(str);
}
}catch(Exception e){
e.printStackTrace();
}
}
public static List<String> addFuteList(List<Future> futureList,List<String> rs) throws Exception{
List<Future> futureList1=new ArrayList<Future> ();
for(Future t:futureList){
if(t.isDone()){
rs.add(t.get().toString());
}else{
System.out.println("任务未完成,等待下一次判断");
Thread.sleep(200);
futureList1.add(t);
}
}
if(futureList1.size()>0){
return addFuteList(futureList1,rs);
}
return rs;
}
}
2.、实现多线程Callable接口 类
import java.util.HashMap;
import java.util.concurrent.Callable;
public class TestCallable implements Callable<String> {
private int id;
public TestCallable(int id){
this.id = id;
}
@Override
public String call() throws Exception {
Thread.sleep(200);
return "result of taskWithResult "+id;
}
}