知识大全 Java中限时线程回调方式的实现

Posted 时间

篇首语:炒沙作縻终不饱,缕冰文章费工巧。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java中限时线程回调方式的实现相关的知识,希望对你有一定的参考价值。

Java中限时线程回调方式的实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

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

  

  package sitinspring; import java awt event ActionEvent; import java awt event ActionListener; import javax swing Timer; /** *//** * 定时回调线程类 * * @author sitinspring() * * @date */ public class TimedCallBackThread implements Runnable // 一秒的毫秒数常量 private final static int ONE_SECOND = ; // 限制时间 以秒为单位 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 = ; // 创建并启动定时器 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 % ; if (modSeed == ) view getLabel () setText( 响应中 ); else if (modSeed == ) view getLabel () setText( 响应中 ); else if (modSeed == ) view getLabel () setText( 响应中 ); // 如果流逝时间大于规定时间则中断线程 if (passedTime > waitTime) passedTime = waitTime; thread interrupt(); public void run() while (passedTime < waitTime) try Thread sleep( );// 模拟一个耗时相应过程 timer stop();// 任务完成 停止Timer view getLabel () setText(model getText ()); catch (InterruptedException ex) timer stop();// 线程中断 停止Timer view getLabel () setText( 在指定时间内未响应 ); catch (Exception ex) ex printStackTrace(); return;

  执行效果如下

  

  

  

  

cha138/Article/program/Java/gj/201311/27315

相关参考