Java业务系统并发技术的使用

简介: Java业务系统并发技术的使用
+关注继续查看

关于JAVA并发执行,主要是借助多线程和JAVA并发包,分两种情况,一个是有返回值,一个是没有返回值。有返回值是需要并发执行完以后拿到结果做下一步的操作,没有返回值主要是并行执行一些独立的任务。个人理解决定使用到并发技术的因素是:多个不相关的没有相互依赖的任务(代码段),在串行的执行下太耗时了,需要提升性能而采取的措施。下面举一个近期项目中使用的并发技术的场景。

前端页面需要显示互不相关的一些统计信息的图形化功能,比如大屏上的几个图表,可以发起一次请求服务器端并发执行,将结果汇总一次性返回,也可以浏览器分多次请求。因此是否需要并发技术,还是需要综合考虑哪一种更适合自己,不是为了用而用。由于该需求需要汇总数据,因此需要使用到有返回值的并发执行技术。

public class ObjectStatusCallable implements Callable<Map<String,Object>> {

    private ObjectService objectServiceImpl;

    private Integer id;

    public ObjectStatusCallable(ObjectService objectServiceImpl, Integer id){
        this.objectServiceImpl = objectServiceImpl;
        this.id = id;
    }

    @Override
    public Map<String,Object> call() {
        List<Object> objectList = new ArrayList();
        Map<String,Object> resultMap = new HashMap<>();
        resultMap.put("objectName",objectList);
        return resultMap;
    }
}
 @Override
    public Map<String, Object> getStatisticList(Integer id) {
        long start = System.currentTimeMillis();
        Map<String,Object> map = new HashMap<>();
        ExecutorService executors = Executors.newFixedThreadPool(3);
        List<Future<Map<String,Object>>> futures = new ArrayList<>();
        Future<Map<String,Object>> objectFuture = executors.submit(new ObjectStatusCallable(objectServiceImpl, id));
        futures.add(noteBookFuture);
        ......
        List<ObjectPO> mapObj = null;
        ......
        try {
            for (Future<Map<String, Object>> future : futures) {
                Map<String, Object> resultMap = future.get();
                if(resultMap.containsKey("objectName")){
                    mapObj = (List<ObjectPO>) resultMap.get("objectName");
                }
                ......
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        executors.shutdown();
        long end = System.currentTimeMillis();
        System.out.println("end-start:"+(end-start));
        map.put("objectName",mapObj);
        ......
        return map;
    }

上面代码包含了部分的伪代码,比如省略号的地方,涉及到很多业务的代码,这里面包含很多的数据库层面的数据查询。getStatisticList是业务层Service中的方法,objectServiceImpl通过Autowire的方式注入。在此只是提供了并发包Callable和ExecutorService的使用。可以根据实际需求传入业务参数和封装统一的返回结果

目录
相关文章
|
4天前
|
Oracle Java 关系型数据库
Windows11 系统中配置Java环境变量
Windows11 系统中配置Java环境变量
16 0
|
8天前
|
缓存 Java 程序员
面试进阶齐飞!Github一天万赞的阿里Java系统性能优化有多牛?
前两天在知乎上看到一个问答,说的是: 一个Java程序员具备什么样的素质和能力才可以称得上高级工程师? 这个问题也引发了我的一些思考,可能很多人会说,“作为高级工程师,基础得过硬、得熟练掌握一门编程语言、至少看过一个优秀开源项目的源代码、有过高并发/性能优化的工作经验、沟通能力强等等”。
23 0
|
8天前
|
算法 Java
48.【Java 格斗制游戏-画板-银行金额转换系统】
48.【Java 格斗制游戏-画板-银行金额转换系统】
9 0
|
8天前
|
Java
45.【Java 实现双色球中奖查询系统】
45.【Java 实现双色球中奖查询系统】
15 0
|
8天前
|
Java 数据安全/隐私保护 C++
43.【Java 实现验证码获取 C++实现密码加密和删除和QQ登入系统】
43.【Java 实现验证码获取 C++实现密码加密和删除和QQ登入系统】
16 0
|
8天前
|
Java
编程作业(2) - 编程题 9. 导弹防御系统(Java)
编程作业(2) - 编程题 9. 导弹防御系统(Java)
|
9天前
|
小程序 前端开发 Java
GitHub私活利器【开源版】前后端分离的Java 商城系统(已上线)
Smart Shop 是一款基于 Spring Cloud +MybatisPlus+XXL-JOB+redis+Vue 的前后端分离、分布式、微服务架构的 Java 商城系统
|
11天前
|
缓存 弹性计算 算法
Java高并发系统限流算法的应用
Java高并发系统限流算法的应用
30 0
|
12天前
|
Java
图书管理借阅系统【Java简易版】Java三大特征封装,继承,多态的综合运用
图书管理借阅系统【Java简易版】Java三大特征封装,继承,多态的综合运用
23 0
|
14天前
|
JSON NoSQL Java
Java从零搭建一个单点登录系统
Java从零搭建一个单点登录系统
11 1
相关产品
云迁移中心
推荐文章
更多