`

java线程实现超时

阅读更多

java线程实现超时
Javathread
用线程实现超时比较简单,大致思想为:定义一个超时守护线程,改线程启动时就sleep规定的超时时间;再执行一个命令或方法时启动该超时线程,如果该命令或方法在制定时间内执行完毕,则关闭守护线程,否则抛出timeout异常。具体代码如下:

定义一个超时守护线程TimeOutThread:
Java代码  收藏代码

    package com.pqrs.file.analyse.timeout; 
     
    public class TimeOutThread extends Thread { 
        /**
         * 超时时间
         */ 
        private long timeOut; 
        /**
         * 是否取消
         */ 
        private boolean cancel; 
        /**
         * 自定义超时异常
         */ 
        private TimeOutException timeOutException; 
         
        public TimeOutThread(long timeOut, TimeOutException timeOutException){ 
            super(); 
            this.timeOut = timeOut; 
            this.timeOutException = timeOutException; 
            //设置本线程为守护线程 
            this.setDaemon(true); 
        } 
         
        public synchronized void cancel() { 
            cancel = true; 
        } 
         
        public void run(){ 
            try{ 
                Thread.sleep(timeOut); 
                 
                if(!cancel){ 
                    throw timeOutException; 
                } 
            } catch(InterruptedException e){ 
                e.printStackTrace(); 
            } 
        } 
    } 



定义一个自己的超时异常:
Java代码  收藏代码

    package com.pqrs.file.analyse.timeout; 
     
    public class TimeOutException extends RuntimeException { 
        /**
          * 序列化号
          */ 
         private static final long serialVersionUID = -8078853655388692688L; 
     
         public TimeOutException(String errMessage) 
         { 
          super(errMessage); 
         } 
    } 



测试类:
Java代码  收藏代码

    public class TestTimeOut { 
    public static void main(String a[]){ 
            TimeOutThread timeOutThread = new TimeOutThread(3000, new TimeOutException("time out!")); 
            try{ 
                timeOutThread.start(); 
                Thread.sleep(5000); 
                timeOutThread.cancel(); 
            } catch(TimeOutException e){ 
                e.printStackTrace(); 
            } catch (InterruptedException e) { 
                e.printStackTrace(); 
            } 
        } 
    } 
分享到:
评论

相关推荐

    java通过线程控制程序执行超时(新)

    java通过线程控制程序执行超时(新) 基本数据类型 反射 线程 超时

    Java线程超时监控

    讲解有关Java中多线程运行时针对单个线程的执行超时监控机制,用于处理单个线程执行控制

    Java中实现线程的超时中断方法实例

    之前在使用Java实现熔断降级组件的时候,需要实现接口请求的超时中断,通过查找相关资料了解了相关的方法,下面这篇文章主要给大家介绍了关于Java中实现线程的超时中断的相关资料,需要的朋友可以参考下

    java通过线程控制程序执行超时

    java通过线程控制程序执行超时,多线程,反射

    线程超时死掉

    Future接口是Java线程Future模式的实 现,可以来进行异步计算。 Future模式可以这样来描述:我有一个任务,提交给了Future,Future替我完成这个任务。期间我自己可以去做任何想做的事情。一段时 间之后,我就便...

    BlockingQueue队列自定义超时时间取消线程池任务

    定义全局线程池,将用户的请求放入自定义队列中,排队等候线程调用,等待超时则自动取消该任务,实现超时可取消的异步任务

    Java同步线程模型分析与改进

    目前普遍采用急救包(Band-Aid)类库的方式解决Java 线程模型存在的同步问题,但类库中的代码很难或无法实 ...通过扩展语法方法解决了同步问题,以确保使用Java线程所开发的 程序的稳定、可靠和可优化。

    java多线程URL方式下载单个大文件

    Java代码,根据URL方式下载单个文件或者图片,根据文件大小进行分批启动多线程下载!

    安卓,Android线程网络超时自动终止

    Android开发中经常需要调用线程访问网络,而手机的网络信号经常断断续续,容易出现网络超时的情况,这种情况下后台线程往往得不到关闭,浪费系统资源。 在下面的例子中使用了java 中的Timer类,对线程进行了约束,...

    浅谈java中异步多线程超时导致的服务异常

    下面小编就为大家带来一篇浅谈java中异步多线程超时导致的服务异常。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Java HttpURLConnection超时和IO异常处理

    主要介绍了Java HttpURLConnection超时和IO异常处理的相关资料,需要的朋友可以参考下

    个人总结的深入java多线程开发

    看完《think in java》多线程章节,自己写的多线程文档,还结合了其他的相关网络资料。 线程 一. 线程池 1)为什么要使用线程池 2 2)一个具有线程池的工作队列 3 3)使用线程池的风险: 4 4)有效使用线程池的原则 5...

    google,baidu,bing网页搜索(java实现)

    程序采用多线程(不超过20个,保证不影响其他程序)和超时设置(默认10秒),自己觉得挺好用的。 包括google网页搜索(GoogleQuery.java) baidu网页搜索(BaiduQuery.java) bing网页搜索(BingQuery.java) 三种...

    java开源包4

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    浅谈Java线程间通信之wait/notify

    下面小编就为大家带来一篇浅谈Java线程间通信之wait/notify。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Java中停止线程执行的方法

    尽管可以在等待wait()条件那里放一个超时设置,但等待wait()的设计目的不是这样的,等待wait()在设计上是用于Java线程间的通信。 而使用睡眠sleep()方式,可以让线程从当前开始睡眠指定的时间。注意不要使用睡眠...

    JAVA上百实例源码以及开源项目

    百度云盘分享 ... Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。  部分源代码摘录:  ftpClient = new FtpClient(); //实例化FtpClient对象  String serverAddr=jtfServer.getText();...

    JAVA上百实例源码以及开源项目源代码

     Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。  部分源代码摘录:  ftpClient = new FtpClient(); //实例化FtpClient对象  String serverAddr=jtfServer.getText(); //得到服务器地址  ...

Global site tag (gtag.js) - Google Analytics