我在这篇文章中对这个小项目有过简单的介绍http://wzu-xiaomai.iteye.com/blog/1779814,你目前在看的这篇文章我主要想讲讲“线程的结束”。
在命令的执行时理想状态是执行后结果完全显示完再进行下一次命令的执行,但是对用户来说这样的体验不好,现实是用户想执行新命令了就停止旧命令结果的显示而显示新命令产生的结果。如果不对执行旧命令的线程进行处理,则保存命令结果的Queue队列内容会造成混乱(多次命令执行结果都放进去了)。
我在iteye问了一个问题http://www.iteye.com/problems/92188如何有效杀死一个线程?现在回过头来看这个问题,觉得自己问错了,不应该是杀死线程,而是跳过线程更合理。我在项目中跳过线程的策略跟那个问题的最佳答案原理差不多,都是设置一下标志位的值。只不过我的标志位不止一个,比如重复点执行就需要跳过旧线程,还有是用户关闭网页了,对一些持续有结果的线程就要在规定时间内结束,即停止结果放入Queue。
我在线程中的代码如下:
while ((line = input.readLine()) != null) { Date dateNow = new Date(); time = dateNow.getTime() - date.getTime(); minute = (time / (1000 * 60)); id = (String) session.getAttribute("id"); if (threadId == id && minute < MINUTE) { results.offer(line); session.setAttribute("result", results); } else { break; } } results.offer("*end*");
每次点执行都会产生一个线程,我会给这个线程一个threadId,如果这个threadId是当前session域中的id则将结果放入队列中,否则说明用户又点了一次执行产生了一个新线程,那么旧线程的结果就不能放入队列中了,新线程的结果才可以。minute是用户关闭浏览器后到当前的时间,以分钟计。当minute > MINUTE时说明用户关闭浏览器大于5分钟了,还在运行的线程代码可以跳出来了。
相关推荐
基于ajax的即时通讯系统例子。
基于ajax技术的网页博客系统,实现基本的博客功能。提供源代码,程序运行截图,提供毕业设计论文。
基于AJAX PHP MYSQL的无刷新分页工具的研究与实现.pdf
基于 ajax 实现的分页查询。。。。。。。。。。
实现基于 Ajax 的无限级菜单源代码 支持Form的无闪提交(方法有点笨) 支持MVC框架,即支持传统网页架构 多线程并发请求(要语言支持线程) 动态加载文件,只加载有用的!处理了Ajax框架臃肿的JS文件问题...
基于AJAX的无刷新聊天室,一个不错的东东,来自于AJAX WEB 2.0
该实例为本人项目中使用的模块代码,经过专业测试人员测试,兼容所有主流浏览器,如有不解之处请联系本人
ajax的查询实现,示例
Ajax实现的在线聊天室
在线即时通讯工具实际上是一种基于WEB方式的聊天工具,又称WEB QQ。用户可以以网页的形式实现聊天功能。本系统采用ASP.NET2.0和ASP.NET AJAX技术,以及SQL SERVER 2005数据库共同实现在线即时通讯工具的方法。
基于Ajax聊天室的设计与分析 论文 对于写论文的同学有一定的帮助
基于Ajax技术的博客系统设计与实现 毕业设计。。。。你懂的。。。
基于AJAX control toolkit 开发的电子商务应用系统,含数据库文件
实现基于Ajax的无限级菜单
基于Ajax技术的异步搜索引擎研究与实现
基于AJAX的IETM动态目录树的设计与实现
使用Ajax、jQuery、Servlet技术实现在线聊天功能,聊天记录会保存到数据库(MySQL)中,并用GSON工具包将集合转换为JSON格式数据传递到前台
基于Struts 2 Ajax实现的Login应用
基于jquery的ajax的网络聊天室
基于Ajax实现网站用户意见反馈.pdf