Beetle框架使用指南之--线程子程序及其执行方式
子程序(SubRoutine)在BJAF框架中的定义是专门用来处理某一次的任务计算,处理完就结束。它本质上也是一个线程,只是这个线程执行一次就结束。另外,BJAF框架了,针对子程序实际运行情况,还实现了一个针对子程序任务执行的超时处理机制,用来解决由于某个任务长时间运行(超过预估的时间,或者死循环,阻塞挂起等)而无法及时线程回收的技术难题。
对于子程序,BJAF框架提供了线程池来优化其执行效率,同时对子程序的执行方式做了封装,(RoutineExecutor)提供做多不同执行方式。参见下面类图:
子程序说明示例
SubRoutine类说明如下:
由RoutineExecutor.runRoutineForResult方法执行
例如,建一个简单子程序,处理任务是打印一下当前时间戳。代码如下:
构建3个子程序,代码分别为,SR1代码
此模型对于哪些计算量很巨大任务的处理很有帮助,我们可以把此任务按照一定的条件,分解成多个子任务,并行处理,从而加快任务处理速度。??针对一组子程序,依次串行执行,并等待所有子程序结束后再返回
沿用前面的3个子程序,串行执行的客户端代码如下:
执行器还提供了一个runRoutineInTurnNoBlock()方法,不会阻塞主流程,让其在后台串行执行。
??先执行,后拿结果当我们在主流程中处理多个任务,若这些任务中,有某个计算量很大,十分消耗时间,为了提高主流程的处理速度,我们可以把这个任务封装成子程序,先执行,主流程处理完其它任务后,再获取这个任务的结果。
示例代码如下:
编写一个HardWorkSR子程序:?
?
执行结果如下:
?
