Java多线程之ThreadPoolExecutor和Future结合使用

List<Future<OpenAccount>> returnFuture = new ArrayList<>();
		ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("openAccount-pool-%d").build();
		ExecutorService pool = new ThreadPoolExecutor(2, 4, 60L, TimeUnit.SECONDS, 
				new LinkedBlockingQueue<Runnable>(), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
for(int i=0;i<10;i++){
	returnFuture.add(pool.submit(new OpenAccountCallable(pcl,record, withholdService,oaInput)));	
}
pool.shutdown();

for (Future<OpenAccount> future : returnFuture) {
	OpenAccount record = new OpenAccount();
	try {
		record = future.get();
	} catch (Exception e) {
		e.printStackTrace();
	}
	System.out.print(record.toString());
}


public static class OpenAccountCallable implements Callable<OpenAccount>{
		private PayChannel payChannel;
		private OpenAccount openAccount;
		private IWithholdService withholdService;
		private Object object;
		
		private OpenAccountCallable(PayChannel payChannel,OpenAccount openAccount ,IWithholdService withholdService,Object object){
			super();
			this.payChannel = payChannel;
			this.openAccount = openAccount;
			this.withholdService = withholdService;
			this.object = object;
		}

		@Override
		public OpenAccount call() throws Exception {
			OpenAccount oat = new OpenAccount();
			if(this.openAccount!=null){
				oat = this.openAccount;
			}
			if(this.object instanceof OpenAccountInput){
				
			}else if(this.object instanceof OpenAccountVerifyInput){
				OpenAccountVerifyInput input = (OpenAccountVerifyInput) this.object;
				logger.info("渠道{}短信成功之后开户操作==request:{}",payChannel.getChannelName(), input.toString());
				OpenAccountVerifyOutput outPut;
				//尽量捕获异常,否则获取返回的内容会有问题returnFuture
				try {
					outPut = withholdService.openAccountVerify(input);
					logger.info("渠道{}短信成功之后开户操作==response:{}",payChannel.getChannelName(), outPut.toString());
					if(WithholdConstant.WITHHOLD_RESPCODE_SUCCESS.equals(outPut.getRespCode())){
						oat.setOpenStatus(Constants.COMMON_STATUS_SUCCESS);
					}else if(WithholdConstant.WITHHOLD_RESPCODE_PROCESSING.equals(outPut.getRespCode())){
						oat.setOpenStatus(Constants.COMMON_STATUS_PROCESS);
					}else{
						oat.setOpenStatus(Constants.COMMON_STATUS_FAIL);
					} 
				} catch (Exception e) {
					oat.setOpenStatus(Constants.COMMON_STATUS_FAIL);
					logger.info("短信成功之后开户操作异常:{}",e.getMessage());
				}
				oat.setSerialNo(input.getSerialNo());
			}
			oat.setChannelId(this.payChannel.getId());
			return oat;
		}
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值