Callable 多线程
public List<Object> listWalletBalance() {
//拿到参数列表
List<String> coins = RedisUtil.listcoin();
//参数列表不能为空
if (coins == null && coins.size() <= 0) {
return list;
}
int taskSize = coins.size();
// 创建一个根据任务长度的线程池
ExecutorService pool = Executors.newFixedThreadPool(coins.size());
// 创建多个有返回值的任务
List<Future> flist = new ArrayList<Future>();
//创建一个存取执行任务线程的数组
Future[] futures = new Future[coins.size()];
try {
//根据任务长度开启线程任务
for (int i = 0; i < coins.size(); i++) {
//创建线程类 见下文
WalletInfo walletInfo = new WalletInfo(coins.get(i));
//将执行任务中的线程存入数组
futures[i]=pool.submit(walletInfo);
}
遍历任务中的数组
for (Future f:futures) {
list.add(f.get());
}
// 关闭线程池
pool.shutdown();
// 获取所有并发任务的运行结果
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
import static hry.utils.Constant.COINTYPE;
import static hry.utils.Constant.WALLETINFO;
import java.util.Date;
import java.util.concurrent.Callable;
import org.apache.commons.chain.Command;
import org.apache.commons.chain.Context;
import org.apache.commons.chain.impl.ContextBase;
import hry.chain.getwalletinfo.CommandChainGetWalletInfo;
import hry.dto.Wallet;
import hry.utils.RSACodeUtil;
public class WalletInfo implements Callable<Object> {
private String Name;
//构建方法
public WalletInfo(String Name) {
this.coinName = Name;
}
@Override
public Object call() throws Exception {
Date dateTmp1 = new Date();
//任务代码存放位置
Date dateTmp2 = new Date();
long time = dateTmp2.getTime() - dateTmp1.getTime();
System.out.println("获取"+Name+"信息花费"+time+"毫秒");
//获取返回的对象
return object;
}
}
还没有评论,来说两句吧...