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的使用。可以根据实际需求传入业务参数和封装统一的返回结果

目录
相关文章
|
5天前
|
运维 Java
Java版HIS系统 云HIS系统 云HIS源码 结构简洁、代码规范易阅读
云HIS系统分为两个大的系统,一个是基层卫生健康云综合管理系统,另一个是基层卫生健康云业务系统。基层卫生健康云综合管理系统由运营商、开发商和监管机构使用,用来进行运营管理、运维管理和综合监管。基层卫生健康云业务系统由基层医院使用,用来支撑医院各类业务运转。
25 5
|
23小时前
|
Java API 调度
[Java并发基础]多进程编程
[Java并发基础]多进程编程
|
1天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
ava从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
|
1天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
1天前
|
Java API
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
|
1天前
|
并行计算 算法 安全
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
|
5天前
|
JavaScript Java 测试技术
基于Java的电影评论系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的电影评论系统的设计与实现(源码+lw+部署文档+讲解等)
21 0
|
5天前
|
JavaScript Java 测试技术
基于Java的实验室设备管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的实验室设备管理系统的设计与实现(源码+lw+部署文档+讲解等)
17 1
|
6天前
|
安全 Java
深入理解 Java 多线程和并发工具类
【4月更文挑战第19天】本文探讨了Java多线程和并发工具类在实现高性能应用程序中的关键作用。通过继承`Thread`或实现`Runnable`创建线程,利用`Executors`管理线程池,以及使用`Semaphore`、`CountDownLatch`和`CyclicBarrier`进行线程同步。保证线程安全、实现线程协作和性能调优(如设置线程池大小、避免不必要同步)是重要环节。理解并恰当运用这些工具能提升程序效率和可靠性。
|
6天前
|
JavaScript Java 测试技术
基于Java的社区人员管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的社区人员管理系统的设计与实现(源码+lw+部署文档+讲解等)
24 2