赛迪网 > IT技术 Java > Java-企业应用
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

JAVA高级:Java中限时线程回调方式的实现

发布时间:2007.11.29 05:00     来源:赛迪网    作者:baocl

线程回调方式我们已经在"使用回调和线程处理一个耗时响应过程"文中进行了讲述,但是有些情况下用户希望在指定时间内返回一个结果,免得无休止的等待下去。这时我们需要使用"限时线程回调方式",它在原有线程回调的基础上加上了一个Timer以计算消耗的时间,如果时间期限到了任务还没有执行完的话即中断线程,示例代码如下:

package com.sitinspring;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.Timer;/** *//** * 定时回调线程类 *  * @author sitinspring(junglesong@gmail.com) *  * @date 2007-11-6 */public class TimedCallBackThread implements Runnable {    // 一秒的毫秒数常量  private final static int ONE_SECOND = 1000;    // 限制时间,以秒为单位  private final int waitTime;    // 已经流逝的时间  private int passedTime;  private Timer timer;  private Thread thread;  private MvcTcModel model;  private MvcTcView view;  public TimedCallBackThread(MvcTcModel model, MvcTcView view, int waitTime)
{ this.model = model; this.view = view; this.waitTime = waitTime; this.passedTime = 0; // 创建并启动定时器 timer = new Timer(ONE_SECOND, new ActionListener() { public void actionPerformed(ActionEvent evt) { timeListener(); } }); timer.start(); // 创建并启动线程来完成任务 thread = new Thread(this); thread.start(); } private void timeListener() { passedTime++; // 动态显示状态 int modSeed = passedTime % 3; if (modSeed == 0) { view.getLabel2().setText("响应中"); } else if (modSeed == 1) { view.getLabel2().setText("响应中.."); } else if (modSeed == 2) { view.getLabel2().setText("响应中."); } // 如果流逝时间大于规定时间则中断线程 if (passedTime > waitTime) { passedTime = waitTime; thread.interrupt(); } } public void run() { while (passedTime < waitTime) { try { Thread.sleep(10000);// 模拟一个耗时相应过程 timer.stop();// 任务完成,停止Timer view.getLabel2().setText(model.getText2()); } catch (InterruptedException ex) { timer.stop();// 线程中断,停止Timer view.getLabel2().setText("在指定时间内未响应"); } catch (Exception ex) { ex.printStackTrace(); } return; } }}

 

  (责任编辑:包春林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 框架不是框框--应用框架的基本思想 (11-28) · 设计模式:如何用Java动态代理实现AOP (11-28)
· JAVA基础:详细介绍什么是Java的虚拟机 (11-28) · Java进阶:Java中的类装载器和命名空间 (11-28)
· Java语言中的ClassLoader与Package机制 (11-28) · 进阶:Swing中的ActionListener响应研究 (11-28)
· 高手如何谈java编程中异常处理的优劣观 (11-28) · Java基础:泛型类型的子类及通配符的使用 (11-28)
· Java编程语言对象池技术的原理及其实现 (11-28) · 教你使用solr搭建你的全文检索 (11-28)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· IT治理撞入“死胡同”的七大诱因 应如何避开
· 互联网零售业酝酿新物种 零售基因信息化变异
· ERP案例分析 SaaS带来冲击 IT服务商面临挑战
· 通方期货CRM解决方案 房地产行业CRM解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统