异步处理(先展示操作信息,后台执行数据库操作)

遇见的问题:

                   公司的内容审核项目,审核人员在审核文件夹的时候,一次性批量审核通过大量文件夹,导致等待一分钟才看见审核结果,导师把任务交给我进行优化。在开会时,给出解决思路:异步解决

 

                  以前没接触过过异步,但是想到synchronized关键是是同步,加了该关键字多线程是同步(乖乖的从前执行到后,没执行完,其他线程不允许执行,显示不出来结果),不加关键字的多线程就是y异步(我是这样理解),于是乎就开始多线程(线程池)

 

                 线程池:这样创建比较常用

	ExecutorService executor = new ThreadPoolExecutor(1,200,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());

                线程方法:异步处理,先return出success,然后线程在后台自己执行update数据库操作

	public void asyncWholeReview(String groupid, String label, Integer status) throws InterruptedException {
		executor.submit(new Runnable(){
			@Override
			public void run() {
				try {
					Thread.sleep(50000); //为了测试方便,进行数据库操作之前,线程先sleep
					wholeReview(groupid,label,status);  // 数据库更新操作
				}catch(Exception e) {
					throw new RuntimeException("文件组审核报错");
				}

			}

		});
	}




        if (groupId != null && groupId.length() > 0) {
			// groupInfoService.groupreview(groupId, AuditLabel.PASS);
			String[] groupIds = groupId.split(",");
			for (String groupIdTmp : groupIds) {
				System.out.println("审核gid"+groupIdTmp);
                // 异步处理
				groupInfoService.asyncWholeReview(groupIdTmp, AuditLabel.PASS, ReviewStatus.PASS_AUDIT);
			}
			return "success"+"$"+groupId;
		} else {
			return "error";
		}

              这样的话,遇见一个问题:用户点击批量操作的数据,还是展示在页面中,这里直接把指定的groipId的元素进行删除

			for(var i=0;i<groupId.length;i++) {
						alert(groupId[i]);
					    
                   document.getElementById(groupId[i]).parentElement.parentElement.remove();
						alert("更新数据完成");
							}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值