偶尔发生java.lang.IllegalStateException: File has been moved - cannot be read again

本文介绍了一种基于线程池实现的微信消息异步推送方法,并针对在推送过程中遇到的MultipartFile类型参数在线程阻塞时导致的问题提出了三种解决方案。
WxSendMsgResult res = new WxSendMsgResult();
		res.setSmsId(smsId);
		res.setDescription("正在推送");
		int i = weixinMesssageService.insertWxSendMsgResult(res);
		if (i == 1) {
			logger.info("开始线程异步推送消息--BatchSendMessageThread start");
			//txtFile应先转换成流后传入
			fixedThreadPool.execute(new BatchSendMessageThread(templateJson, txtFile, weixinMesssageService, wxAccount,
					smsId, batchKey, semaphore));
		} else if (i == 2) {

异步启动线程,传入的是txtFile (MultipartFile) ,当线程阻塞时, 线程等待了一段时候后.再去读取txtFile, 就会报异常.

解决的办法大概有三种,1,控制线程阻塞时间. 不允许阻塞(控制上传速率,). 2,按别人说的将maxInMemorySize扩大(参考:http://lawrencej.iteye.com/blog/2262675).3,将txtFile 获取后转移到临时文件,用完后手动删除(参考:https://www.cnblogs.com/yxh1008/p/6537863.html).

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值