一个多线程程序中控制的功能设计和分析(ing)

用了一周半的时间编写了这么一个程序,该程序是一个多线程的系统,除了最上边的两个方块不是线程外,下面的方块都是系统运行过程中的线程,而圆柱型就是队列,各个线程之间主要通过队列来交互,也有通过线程去触发另外线程的运行的交互方式!

 

程序从启动到运行都正常,但是当初编写程序的时候,没有考虑如何关闭程序! 默认关闭的方式是直接杀掉进程,这种方式会造成程序停止运行后一些存储在队列的消息不能被处理,这样会造成数据处理的缺失!

 

所以需要需要在原有的系统中添加正常的停止功能:因为涉及到多线程之前的交互,比运行的时候复杂一些;我需要好好履一履多线程的知识,然后对系统进行改造!

程序的结构图如下:

 


 

 

 

====================================================================================================

 

最终的停止程序的的时候按照如下的顺序停止各个线程:

A.扫描任务执行器;

B.指标包含多张表的情况处理器;

 

C.性能数据查询分派器(包括D.性能数据查询执行器的线程池)

E.性能数据查询结果分派器;(包括F:查询结果处理执行器;)

解决方案:
在启动各个执行器的时候,将执行器按照上面的顺序压入一个FIFO的队列中,并启动一个线程(系统监控线程G)单独维护这个队列(这个线程负责监听关闭程序的消息请求,在接收到关闭程序请求的时候执行关闭操作);
如何进行关闭呢,这里有两个关键点:
1. 每个执行器需要实现一个接口,接口中有stop方法,该方法去触发执行器进行停止的操作;
2. 每个执行器通过ExecutorService的submit方法来运行,同时会返回一个Future对象,可以对Future对象调用get方法来判断线程是否结束;

这样一个基本的流程就出来了:

 

系统监控线程G接收关闭程序的消息请求;

系统监控线程G从队列中依次取出取出执行器和对应的Future对象,调用执行器的stop方法,然后通过Future的get方法来判断线程是否结束;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值