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

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

 

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

 

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

程序的结构图如下:

 


一个多线程程序中控制的功能设计和分析(ing)_第1张图片

 

 

 

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

 

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

A.扫描任务执行器;

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

 

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

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

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

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

 

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

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

 

 

你可能感兴趣的:(多线程,数据结构,F#)