使用线程池优化sdk调用流程

场景:
  现有一个人脸检测算法sdk包(C++),使用java中的jni调用该sdk提供出java可直接调用的接口,并打包成jar包(作为依赖包)供业务系统调用。

  人脸算法执行流程为:(1)加载lisence -> (2)初始化FaceDetect、FaceAttribute 等对象 -> (3)传入图片数据进行检测 。 其中第一步加载lisence在整个系统的生命周期中,只需要加载一次就行。第二步需要创建的对象比较大。

  初始情况:直接调用jar包接口,每次业务系统调用都会进行加载lisence,创建初始化FaceDetect、FaceAttribute对象。这样造成接口执行耗时久,大对象频繁创建销毁。

优化:
(1)依赖包中的算法执行流程,封装成一个Callable<FaceAttrInfo[]>,可以给线程池调用,使用Callable接口是因为需要返回算法执行后识别出的人脸结果。
算法执行流程封装成任务

(2)继承Thread,定制自己的线程,在线程初始时,加载lisence,创建FaceDetect、FaceAttribute 对象。
在这里插入图片描述

(3)在业务系统调用处,使用ThreadPoolExecutor 创建线程池,其中通过ThreadFactory参数指定我们要创建的线程为上述第二步自定义的线程。

在这里插入图片描述

上一篇: 24.两两交换链表中的节点
coder_flag
博客等级 码龄9年 2粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值