如何实现Java代码中实现异步操作,利用线程池newScheduledThreadPool

在实际开发中,会遇到一种情况,就是需要把数据同步到别渠道,然而同步这个操作又很费时,为了不影响当前功能的页面响应,这个时候可以考虑类似ajax中异步操作的想法,这个时候可以利用java的线程池来实现,代码如下:

public class SyncAppInfoToOtherChannelUtil {
	
	private static Logger logger = LoggerFactory.getLogger(SyncAppInfoToOtherChannelUtil.class);
	
	private static ExecutorService executor = Executors.newScheduledThreadPool(20);
	
	/**
	 * 同步应用数据方法
	 * @param appInfo	待同步应用信息
	 */
	public static void syncAppInfo(SeAppInfoExpand appInfo,SeAppFeeInfo seAppFeeInfo,String url){
		executor.submit(new Runnable() {
			@Override
			public void run() {
				try{
					String channel = appInfo.getChannel();
					if(channel.equals("1")){//WEB端
						WebChannelAppInfo webChannelAppInfo= changeToWebAppInfo(appInfo,seAppFeeInfo);
						Map<String,WebChannelAppInfo> map = new HashMap<String,WebChannelAppInfo>();
						map.put("params", webChannelAppInfo);
						String reqJson = JSONObject.toJSONString(map);//请求json串信息
						logger.info("【WEB端】请求参数:"+reqJson);
						String str = HttpClient.doJSONPostMethod(url, reqJson);
						logger.info("【WEB端】同步应用返回信息:"+str);
					}else if(channel.equals("2")){//PC桌面端
						
					}else if(channel.equals("3")){//手机移动端
						PhoneChannelAppInfo phoneAppInfo = changeToPhoneAppInfo(appInfo);
						String reqJson = JSONObject.toJSONString(phoneAppInfo);//请求json串信息
						logger.info("【手机移动端】请求参数:"+reqJson);
						String str = HttpClient.doJSONPostMethod(url, reqJson);
						logger.info("【手机移动端】同步应用返回信息:"+str);
					}else if(channel.equals("4")){//电子书包端
						FlatChannelAppInfo flatChannelAppInfo= changeToFlatAppInfo(appInfo);
						String reqJson = JSONObject.toJSONString(flatChannelAppInfo);//请求json串信息
						logger.info("【电子书包端】请求参数:"+reqJson);
						String str = HttpClient.doJSONPostMethod(url, reqJson);
						logger.info("【电子书包端】同步应用返回信息:"+str);
					}else if(channel.equals("5")){//电子班牌端
						ClassChannelAppInfo classAppInfo = changeToClassAppInfo(appInfo);
						String reqJson = JSONObject.toJSONString(classAppInfo);//请求json串信息
						logger.info("【电子班牌端】请求参数:"+reqJson);
						String str = HttpClient.doJSONPostMethod(url, reqJson);
						logger.info("【电子班牌端】同步应用返回信息:"+str);
					}else if(channel.equals("6")){//工作台
						//同步应用到工作台
//						WorkBenchAppInfo  workBenchAppInfo= changeToWorkBenchAppInfo(appInfo);
						String reqJson = JSONObject.toJSONString(appInfo);//请求json串信息
						logger.info("【工作台】请求参数:"+reqJson);
						String str = HttpClient.doJSONPostMethod(url, reqJson);
						logger.info("【工作台】同步应用返回信息:"+str);
					}
				}catch(Exception e){
					logger.info("同步应用信息失败",e);
				}finally{
					
				}
			}
		});
		
		//executor.shutdown();
	}

newScheduledThreadPool的好处,可以无限的往池子中存放任务(Executors.newScheduledThreadPool(20)是用来定义并发数),超过并发数的任务处于等待中,并发任务完成在继续执行等待的任务;

转载于:https://my.oschina.net/u/4051450/blog/3061775

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值