发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 大数据 扩展性 并发编程 事件驱动 分布式 SOA

多线程情况下如果保持对象状态的一致性

         
2007-10-19 11:27
赞助商链接

小弟正在做一个项目遇到一个问题:
一个轮询线程采集网络数据,然后将采集到的数据推入Queue,另一个线程从Queue中取出数据,对数据进行处理,并将数据存到数据库。

我这样设计:轮询采集定义为一个采集任务BaseTask,BaseTask有几个状态:告警状态(未发生告警、发生告警、清除告警,这个告警状态是根据采集到的网络数据决定的)、任务状态(未完成、已完成、任务终止、任务异常),任务状态是在轮询线程中修改的,因为采集任务可能发生可能发出异常,就要将任务状态改为任务异常,然后修改BaseTask数据库中任务状态。

由于数据量较大我为数据处理设定了一个Queue,数据处理线程从queue中取数据计算,计算的值可能超出某个范围,就要修改BaseTask的告警状态为发生告警,同时修改BaseTask数据库中告警状态为告警。


这样就遇到了问题,告警状态可能和任务状态在同一时间可能不一致。原来想将告警状态和任务状态在数据处理线程中保存,此时由于Queue的延迟,任务状态,并不是最新的,这样更糟糕的是,用户客户端还要界面上显示BaseTask,看的任务状态也不是最新的

2007-10-19 11:59

自己顶一个

2007-10-20 21:24

不建议螺丝壳里做道场,由于你这个应用数据量较大,重新考虑JMS异步架构,底层多线程已经是成熟的组件,拿过来用就可以,在其基础再搭建你自己的业务状态和处理。

2007-10-22 21:44

谢谢 banq

多线程      对象生命周期     

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com