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

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

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

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

publicclassObjectStatusCallableimplementsCallable<Map<String,Object>> {
privateObjectServiceobjectServiceImpl;
privateIntegerid;
publicObjectStatusCallable(ObjectServiceobjectServiceImpl, Integerid){
this.objectServiceImpl=objectServiceImpl;
this.id=id;
    }
@OverridepublicMap<String,Object>call() {
List<Object>objectList=newArrayList();
Map<String,Object>resultMap=newHashMap<>();
resultMap.put("objectName",objectList);
returnresultMap;
    }
}
@OverridepublicMap<String, Object>getStatisticList(Integerid) {
longstart=System.currentTimeMillis();
Map<String,Object>map=newHashMap<>();
ExecutorServiceexecutors=Executors.newFixedThreadPool(3);
List<Future<Map<String,Object>>>futures=newArrayList<>();
Future<Map<String,Object>>objectFuture=executors.submit(newObjectStatusCallable(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 (Exceptione){
e.printStackTrace();
        }
executors.shutdown();
longend=System.currentTimeMillis();
System.out.println("end-start:"+(end-start));
map.put("objectName",mapObj);
        ......
returnmap;
    }

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

目录
相关文章
|
10天前
|
存储 设计模式 分布式计算
Java中的多线程编程:并发与并行的深度解析####
在当今软件开发领域,多线程编程已成为提升应用性能、响应速度及资源利用率的关键手段之一。本文将深入探讨Java平台上的多线程机制,从基础概念到高级应用,全面解析并发与并行编程的核心理念、实现方式及其在实际项目中的应用策略。不同于常规摘要的简洁概述,本文旨在通过详尽的技术剖析,为读者构建一个系统化的多线程知识框架,辅以生动实例,让抽象概念具体化,复杂问题简单化。 ####
|
11天前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
40 3
|
9天前
|
JSON 前端开发 JavaScript
java-ajax技术详解!!!
本文介绍了Ajax技术及其工作原理,包括其核心XMLHttpRequest对象的属性和方法。Ajax通过异步通信技术,实现在不重新加载整个页面的情况下更新部分网页内容。文章还详细描述了使用原生JavaScript实现Ajax的基本步骤,以及利用jQuery简化Ajax操作的方法。最后,介绍了JSON作为轻量级数据交换格式在Ajax应用中的使用,包括Java中JSON与对象的相互转换。
19 1
|
16天前
|
SQL 监控 Java
技术前沿:Java连接池技术的最新发展与应用
本文探讨了Java连接池技术的最新发展与应用,包括高性能与低延迟、智能化管理和监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,为开发者提供了一份详尽的技术指南。
23 7
|
18天前
|
移动开发 前端开发 Java
过时的Java技术盘点:避免在这些领域浪费时间
【10月更文挑战第14天】 在快速发展的Java生态系统中,新技术层出不穷,而一些旧技术则逐渐被淘汰。对于Java开发者来说,了解哪些技术已经过时是至关重要的,这可以帮助他们避免在这些领域浪费时间,并将精力集中在更有前景的技术上。本文将盘点一些已经或即将被淘汰的Java技术,为开发者提供指导。
48 7
|
14天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
30 3
|
14天前
|
Java 数据库连接 数据库
如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面
本文介绍了如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面。通过合理配置初始连接数、最大连接数和空闲连接超时时间,确保系统性能和稳定性。文章还探讨了同步阻塞、异步回调和信号量等并发控制策略,并提供了异常处理的最佳实践。最后,给出了一个简单的连接池示例代码,并推荐使用成熟的连接池框架(如HikariCP、C3P0)以简化开发。
32 2
|
14天前
|
SQL 监控 Java
Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面
本文探讨了Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,以实现高效稳定的数据库访问。示例代码展示了如何使用HikariCP连接池。
9 2
|
16天前
|
Java 数据库连接 数据库
优化之路:Java连接池技术助力数据库性能飞跃
在Java应用开发中,数据库操作常成为性能瓶颈。频繁的数据库连接建立和断开增加了系统开销,导致性能下降。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接,显著减少连接开销,提升系统性能。文章详细介绍了连接池的优势、选择标准、使用方法及优化策略,帮助开发者实现数据库性能的飞跃。
23 4
|
14天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
16 1