用了一周半的时间编写了这么一个程序,该程序是一个多线程的系统,除了最上边的两个方块不是线程外,下面的方块都是系统运行过程中的线程,而圆柱型就是队列,各个线程之间主要通过队列来交互,也有通过线程去触发另外线程的运行的交互方式!
程序从启动到运行都正常,但是当初编写程序的时候,没有考虑如何关闭程序! 默认关闭的方式是直接杀掉进程,这种方式会造成程序停止运行后一些存储在队列的消息不能被处理,这样会造成数据处理的缺失!
所以需要需要在原有的系统中添加正常的停止功能:因为涉及到多线程之前的交互,比运行的时候复杂一些;我需要好好履一履多线程的知识,然后对系统进行改造!
程序的结构图如下:
====================================================================================================
最终的停止程序的的时候按照如下的顺序停止各个线程:
A.扫描任务执行器;
B.指标包含多张表的情况处理器;
C.性能数据查询分派器(包括D.性能数据查询执行器的线程池)
E.性能数据查询结果分派器;(包括F:查询结果处理执行器;)
解决方案:
在启动各个执行器的时候,将执行器按照上面的顺序压入一个FIFO的队列中,并启动一个线程(系统监控线程G)单独维护这个队列(这个线程负责监听关闭程序的消息请求,在接收到关闭程序请求的时候执行关闭操作);
如何进行关闭呢,这里有两个关键点:
1. 每个执行器需要实现一个接口,接口中有stop方法,该方法去触发执行器进行停止的操作;
2. 每个执行器通过ExecutorService的submit方法来运行,同时会返回一个Future对象,可以对Future对象调用get方法来判断线程是否结束;
这样一个基本的流程就出来了:
系统监控线程G接收关闭程序的消息请求;
系统监控线程G从队列中依次取出取出执行器和对应的Future对象,调用执行器的stop方法,然后通过Future的get方法来判断线程是否结束;
- 大小: 47.3 KB
分享到:
相关推荐
Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)...
posix多线程程序设计源码 posix多线程程序设计源码 posix多线程程序设计源码 posix多线程程序设计源码
Win32多线程程序设计全部代码 Win32多线程程序设计全部代码
Win32多线程程序设计 英文版
POSIX多线程程序设计随书源码,很不错的多线程编程资料
《POSIX多线程程序设计》深入描述了IEEE的开放系统接口标准——POSIX线程,通常称为Pthreads标准。本书首先解释了线程的基本概念,包括异步编程、线程的生命周期和同步机制;然后讨论了一些高级话题,包括属性对象、...
OpenMP 多线程程序设计,VS2005中基于OpenMP的多线程程序设计。
Java多线程程序设计
Java多线程程序设计详细解析,详细介绍了多线程的方方面面,是java备考和面试宝典
POSIX多线程程序设计:如何使用多线程进行并行计算和提高计算效率。线程程序设计以及一般的线程程序会遇到的问题。
在《Win32多线程程序设计》这本书中,Jim Beveridge和Robert Wiener告诉你什么时机、什么地点、什么方法可以使用多线程。 本书主题包括: ·Internet开发范例,包括ISAI和WinSock。 ·如何在服务器中使用线程和...
《Win32多线程程序设计》配套代码 《Win32多线程程序设计》配套代码
侯杰翻译Win32多线程程序设计
多线程应用程序设计
Win32多线程程序设计完美版,不是扫描版。Windows程序设计必不可少的参考书籍。
Win32 多线程程序设计完全手册PDF,本书详细讲解了多线程程序设计。
1.使用三种VC的多线程同步方法编写一个多线程的程序(要求在屏幕上先显示Hello,再显示World)。 1)基于全局变量的多线程同步程序; 2)基于事件的多线程同步程序; 3)基于临界区的多线程同步程序。
针对多线程程序数据竞争分析与检测困难的问题,提出一种基于隐Markov模型的多线程程序时序分析方法.用随机变量不确定性刻画不同线程之间时序上的交互关系,分析数据竞争条件下程序不确定结果的概率分布情况;建立多线程...