首页 | 考研 | MBA | 专升本 | 成考 | 自考 | 高考 | 中考 | 出国 | 外语 | 电脑 | 公务员 | 司法 | 财考 | 资格考试 | 论文写作
 
 淘学考试计算机 正文


Java中限时线程回调方式的实现
编辑:sunl 时间:2007-11-27 来源:淘学考试网 推荐好友

 

  线程回调方式我们已经在"使用回调和线程处理一个耗时响应过程"文中进行了讲述,但是有些情况下用户希望在指定时间内返回一个结果,免得无休止的等待下去。这时我们需要使用"限时线程回调方式",它在原有线程回调的基础上加上了一个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;
}
}
}

  执行效果如下:

 

  

 

  

 

  

 

 

 

 

 

 

 

 

 

 

 相 关 内 容



.

  推荐课程
 
 
 
 
 
 
 等级考试排行
 微软认证排行
 Oracle认证排行
版权信息 - 关于我们 - 联系方式 - 服务承诺 - 客户投诉 - 广告服务 - 网站合作 - 会员服务 - 友情链接 - 站长统计3
1 不良信息
举报中心
文明办网文明上网举报电话:15964542668
举报邮箱:topej@163.com
2 网络110
报警服务
服务热线:15964542668 电子邮件:guoyong@topej.com 服务 QQ:350125289
淘学之家(www.topej.com)旗下网站 ICP注册号:鲁ICP备07016860号