`

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.util.concurrent`包中的`Future`和`ExecutorService`来实现线程超时。`ExecutorService`是一个接口,它提供了管理和控制线程池的能力,而`Future`则表示异步计算的结果。当我们提交一个任务...

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

    本文将深入探讨如何使用Java的线程机制来实现程序执行的超时控制,同时也会涉及基本数据类型、反射以及它们在超时控制中的应用。 首先,我们要理解Java中的线程。线程是程序的执行单元,每个线程都有自己的执行路径...

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

    Java中实现线程的超时中断方法实例 概述:在 Java 中实现线程的超时中断是非常重要的,特别是在熔断降级组件中。熔断降级组件需要在指定的超时时间内中断请求线程,以避免请求长时间阻塞系统资源。在这篇文章中,...

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

    在Java编程中,控制程序执行超时是一项关键任务,特别是在多线程环境下,我们需要确保某个任务不会无限期地运行,导致资源浪费或者阻塞其他重要任务。本篇将深入探讨如何利用Java的线程和定时器(Timer)来实现这个...

    Java线程超时控制的实现.docx

    ### Java线程超时控制实现详解 #### 一、引言 在开发过程中,经常会遇到需要对线程执行时间进行限制的情况,例如与远程数据库的交互或网络数据的下载等耗时操作。为了提高程序的健壮性和用户体验,合理地控制这些...

    Java线程状态流转图

    Java线程状态流转图知识点总结 Java线程状态流转图是一种用于描述Java线程生命周期中不同的状态和状态转换的图形表示方式。该图形展示了Java线程从创建到终止的整个生命周期,并详细介绍了每种状态的特点和转换...

    JAVA线程学习(源代码)

    本资源"JAVA线程学习(源代码)"提供了关于Java线程的源代码示例,帮助我们深入理解和实践线程的使用。 首先,我们要理解Java中的线程模型。Java线程由`java.lang.Thread`类或`java.util.concurrent.Executor`框架来...

    Java线程使用教程

    Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的并发性和效率。本教程将深入探讨Java线程的使用,帮助开发者掌握这一关键技术。 一、线程基础 1. **线程的概念**:线程...

    线程超时死掉

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

    Java线程培训资料

    ### Java线程培训资料知识点详解 #### 一、Java线程基本概念 1. **如何编写与启动线程** - **方式一:继承Thread类** ```java class MyThread extends Thread { @Override public void run() { // 业务逻辑 ...

    java多线程经典案例

    Java提供了三种线程状态:新建(New)、运行(Runnable)、阻塞(Blocked)、等待(Waiting)、超时等待(Timed Waiting)和终止(Terminated)。阻塞状态通常发生在线程等待I/O操作完成、调用sleep()方法、等待锁...

    java多线程编程总结

    Java线程的状态包括新建 (`NEW`)、就绪 (`RUNNABLE`)、阻塞 (`BLOCKED`)、等待 (`WAITING`)、超时等待 (`TIMED_WAITING`) 和终止 (`TERMINATED`)。 #### 五、Java线程:线程的同步与锁 - **线程同步** 线程同步...

    idea+java多线程模拟队列实现排队叫号.zip

    在本项目"idea+java多线程模拟队列实现排队叫号.zip"中,我们探讨的是如何使用Java来模拟一个基于多线程的排队叫号系统。IntelliJ IDEA(简称Idea)是一款强大的Java集成开发环境,它为编写、调试和优化Java代码提供...

    Java实现任务超时处理方法

    Java实现任务超时处理方法 Java实现任务超时处理方法是指在Java中对超时任务的处理,主要有两种方式:基于异步任务结果的超时获取和使用延时任务来终止超时操作。 基于异步任务结果的超时获取是通过使用Future对象...

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

    在Java编程中,`BlockingQueue`是一个非常重要的并发工具类,它主要用于线程间的数据通信。`newFixedThreadPool`是`java.util.concurrent`包中的一个线程池工厂方法,用于创建固定数量线程的线程池。`FutureTask`则...

    java 线程池源代码

    3. `keepAliveTime`: 当线程数超过核心线程数时,空闲线程等待新任务的最长时间,超时会被终止。 4. `unit`: keepAliveTime的时间单位。 5. `workQueue`: 任务队列,用于存储待执行的任务。常见的有`...

    java线程安全测试

    Java线程安全是多线程编程中的一个关键概念,它涉及到多个线程访问共享资源时可能出现的问题。在Java中,线程安全问题通常与并发、内存模型和可见性有关。Java内存模型(JMM)定义了如何在多线程环境下共享数据的...

    java 多线程并发实例

    在Java中,创建线程主要有两种方式:继承Thread类和实现Runnable接口。在提供的实例中,我们可能会看到这两种方式的运用。 1. 继承Thread类:通过创建新的Thread子类并重写其run()方法,然后创建该子类的实例并调用...

    Java多线程编程核心技术_完整版_java_

    在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将深入探讨这一主题。 一、线程的创建与启动 1. 继承Thread类:创建一个新的类,该类继承自Thread类,然后重写...

    Java多线程编辑核心技术

    首先,Java中的线程是由java.lang.Thread类或实现java.lang.Runnable接口来创建的。一个线程对象可以调用start()方法来启动线程,而run()方法则是线程执行的代码。其次,Java提供了两种创建线程的方式:继承Thread类...

Global site tag (gtag.js) - Google Analytics