美文网首页
Java后台耗时任务思路

Java后台耗时任务思路

作者: 少寨主的互联网洞察 | 来源:发表于2019-01-24 11:12 被阅读0次

前记

我们在处理后台任务的时候,经常会遇到某个任务需要较长时间,没法及时给前台反馈结果的情况,此时我们希望前台查询或者刷新的时候给出当前任务的执行状态,而不是一直空耗阻塞着,由此诞生了以下思路,当然Spring已经提供了对应的框架实现,这里只是对这种思路的处理方式的一种探究

  • 耗时任务
class DefaultTimeConsumingTast implements Callable{
        private String id;
        DefaultTimeConsumingTast(String id){
            this.id=id;
        }
        @Override
        public User call() {
            User user=new User();
            try {
                Thread.currentThread().sleep(5000);
                user.setAge(Integer.parseInt(id));
                return user;
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
  • 状态查询响应
@RequestMapping(value = "/getAge",method = RequestMethod.GET)
    @ResponseBody
    public User getUser1(@RequestParam("id")String id){
        User u=new User();
        u.setMessage("未完成");
        if(futures.containsKey(id)){
            Future<User> userFuture=futures.get(id);
            if(userFuture.isDone()){
                try{
                    u=userFuture.get();
                    u.setMessage("已完成");
                }catch (InterruptedException | ExecutionException e){
                    e.printStackTrace();
                }
                futures.remove(id);
            }
        }else{
            Future<User> future=exec.submit(new DefaultTimeConsumingTast(id));
            futures.put(id,future);
        }
        return u;
    }
  • 全局声明变量或对象
ExecutorService exec= Executors.newFixedThreadPool(2);
private static Map<String,Future<User>> futures=new HashMap<>();

相关文章

  • Java后台耗时任务思路

    前记 我们在处理后台任务的时候,经常会遇到某个任务需要较长时间,没法及时给前台反馈结果的情况,此时我们希望前台查询...

  • swoole异步队列讲解

    思路:首先swoole作为后台守护进程处理耗时的任务(Job),通过swoole_client将任务丢进后台Job...

  • Android中的线程形态-IntentService

    IntentService 可用于执行后台耗时的任务,当任务执行完时它会自动停止。IntentService比较适...

  • iOS话题:GCD-2020-04-28

    基本使用 GCD的基本使用场景就是避免耗时任务导致界面卡顿。基本思路: 将耗时任务放入全局并行队列中执行。 执行完...

  • IntentService源码分析

    IntentService可用于执行耗时的,高优先级的后台任务,封装了Handlerthread和Handler ...

  • Android线程和线程池---学习笔记

    AsyncTask 轻量级的异步任务类封装了线程池和Handler 用于子线程更新UI 不适合特别耗时的后台任务 ...

  • Service、IntentService

    Service是android中四大组件之一,用于处理后台任务,不能处理耗时任务,否则会造成ANR而IntentS...

  • Android控件系列之---->WebView(不提供具

    首先致java后台转Android开发的朋友,webView的开发思路可以完全按照网站的开发思路进行。 webVi...

  • 小驴拉磨之iOS进阶-多线程(7)—— GCD 同步任务

    同步任务 在开发中,通常会将耗时操作放后台执行,有的时候,有些任务彼此有依赖关系!例子:登录、支付、下载在队列里,...

  • Service详解

    一、service的应用场景,以及和Thread的区别 1.service定义 用来:后台处理耗时逻辑,长时间任务...

网友评论

      本文标题:Java后台耗时任务思路

      本文链接:https://www.haomeiwen.com/subject/uwlyjqtx.html