通过FutureTask拿到一个线程执行的返回值
如果拿到多个线程的返回值 则组装成List<FutureTask> 然后遍历结果拿到返回值
具体的类
package com.qbsea.knowledge.future;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
import com.qbsea.knowledge.future.model.Card;
public class MainTest {
public static void main(String[] args) throws InterruptedException, ExecutionException {
List<String> userIdList = new ArrayList<>();
userIdList.add("uuid001");
userIdList.add("uuid002");
userIdList.add("uuid003");
//组装任务
List<FutureTask<Card>> taskList = new ArrayList<>();
for (String userId : userIdList) {
//传递业务参数
MyBusinessTask myBusinessTask = new MyBusinessTask(userId);
//拿到任务的返回值
FutureTask<Card> futureTask = new FutureTask<>(myBusinessTask);
taskList.add(futureTask);
}
//执行任务
ExecutorService pool = Executors.newFixedThreadPool(4);
for (FutureTask<Card> futureTask : taskList) {
pool.submit(futureTask);//执行任务
}
//查询任务执行结果
for (FutureTask<Card> futureTask : taskList) {
Card card = futureTask.get();
System.out.println("最后的执行结果为="+card.getCardNo());
}
pool.shutdown();
}
}
任务类的具体实现
package com.qbsea.knowledge.future;
import java.util.Random;
import java.util.concurrent.Callable;
import com.qbsea.knowledge.future.model.Card;
public class MyBusinessTask implements Callable<Card> {
private String userId;
MyBusinessTask(String userId){
this.userId = userId;
}
@Override
public Card call() throws Exception {
//query 卡的信息
Card card = new Card();
Random random = new Random();
String cardNo = userId+"_000000"+random.nextInt(9);
card.setCardNo(cardNo);
return card;
}
}
model类
package com.qbsea.knowledge.future.model;
public class Card {
private String cardNo;
public String getCardNo() {
return cardNo;
}
public void setCardNo(String cardNo) {
this.cardNo = cardNo;
}
}