`

JAVA 使用多线程实现超时控制

阅读更多

实现描述:使用一个守护线程作为计时器,并且在计时结束时抛出一个未检测异常。

 

守护线程类

   /**
  * 本线程设置了一个超时时间
  * 该线程开始运行后,经过指定超时时间,
  * 该线程会抛出一个未检查异常通知调用该线程的程序超时
  * 在超时结束前可以调用该类的cancel方法取消计时
  */
  public class TimeoutThread extends Thread{
      // 计时器超时时间
      private long timeout;
      // 计时是否被取消
      private boolean isCanceled = false;
      // 当计时器超时时抛出的异常
      private TimeoutException timeoutException;
      public TimeoutThread(long timeout,TimeoutException timeoutErr) {
          super();
          this.timeout = timeout;
          this.timeoutException = timeoutErr;
          //设置本线程为守护线程
          this.setDaemon(true);
      }
      /**
       * 取消计时
       */
      public synchronized void cancel() {
          isCanceled = true;
      }
      /**
       * 启动超时计时器
       */
      public void run() {
          try {
              Thread.sleep(timeout);
              if(!isCanceled)
                  throw timeoutException;
          } catch (InterruptedException e) {
              e.printStackTrace();
          }
      }
  }

 
抛出异常类

该类继承了RuntimeException,原因是run方法不能抛出已检测异常。

public class TimeoutException extends RuntimeException {
  /**
  * 序列化号
  */
  private static final long serialVersionUID = -8078853655388692688L;
  public TimeoutException(String errMessage) {
      super(errMessage);
  }
}

 

  // 初始化超时类
  TimeoutThread t = new TimeoutThread(5000, new TimeoutException("超时"));
  try {
      t.start();
      .....要检测超时的程序段....
      t.cancel();
  } catch (TimeoutException e) {
      ...对超时的处理...
  }

本方法的使用可以实现线程自己管理超时,并且可以管理某一段代码超时时,可以在方法内部给出处理办法。
但是需要注意的是:本方法的超时时间并不是当前线程的运行时间,而是计时器开始计时起系统运行的时间。

java中有自带API可以实现超时线程控制:Callable, Future

 

分享到:
评论

相关推荐

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

    在Java编程中,控制程序执行超时是一项重要的任务,特别是在多线程环境下,我们可能需要确保某个任务不会无限制地运行下去,导致资源耗尽。本文将深入探讨如何使用Java的线程机制来实现程序执行的超时控制,同时也会...

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

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

    Java线程超时监控

    首先,我们可以使用`java.util.concurrent`包中的`Future`和`ExecutorService`来实现线程超时。`ExecutorService`是一个接口,它提供了管理和控制线程池的能力,而`Future`则表示异步计算的结果。当我们提交一个任务...

    java多线程经典案例

    通过分析并实践`threadTest`案例,我们可以深入理解Java多线程的原理和使用技巧,为编写高效并发程序打下坚实基础。同时,也要注意多线程编程中的死锁、活锁和饥饿等问题,合理设计线程间的交互,避免出现不可预期的...

    java 多线程并发实例

    在Java编程中,多线程并发是...总之,Java的多线程并发实例可以帮助我们更好地理解和实践线程控制、同步机制以及经典的设计模式,提升我们的编程能力。通过不断学习和实践,我们可以编写出高效、安全的多线程并发程序。

    JAVA多线程实现数据库之间的数据互导、连接池、及多表插入数据库功能

    1. **Java多线程**: - **线程创建**:Java提供了多种创建线程的方式,如继承Thread类或实现Runnable接口。理解这两种方式的优缺点是基础,例如,实现Runnable接口更利于资源复用。 - **线程同步**:为了避免多...

    Java多线程练习题

    Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。在Java中,多线程的实现主要通过两种方式:继承Thread类和实现Runnable接口。理解并掌握多线程的使用对于任何Java开发者...

    java多线程实现-tcp端口扫描

    在本项目"java多线程实现-tcp端口扫描"中,我们利用多线程技术来加速TCP端口扫描的过程。TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,广泛应用于网络通信中。端口扫描是网络安全检测和...

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

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...

    Java多线程网络爬虫(时光网为例)源码

    Java多线程网络爬虫是一种高效地从互联网上抓取数据的技术,特别是在处理大量网页时,多线程能显著提高爬虫的效率。本项目以时光网(Mtime)为例,展示如何使用Java实现这样的爬虫。时光网是一个提供电影、电视剧、...

    java多线程的两种实现

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应性。在Java中,有两种主要的实现多线程的方式:通过`Thread`类和通过实现`Runnable`接口。 1. **通过`Thread`类实现多线程*...

    java多线程详解(比较详细的阐述了多线程机制)

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,从而提升系统效率和资源利用率。本文将深入探讨Java多线程机制,包括线程的创建、同步、通信以及常见设计模式。 首先,Java中创建线程主要有两种...

    基于java的多线程端口扫描软件

    总的来说,这个项目涵盖了Java多线程编程、Socket网络通信、GUI设计和打包部署等多个方面,对于学习和理解这些基础知识非常有帮助。通过分析和实践这个程序,开发者可以深入理解网络扫描的工作原理,同时提升Java...

    Java实现多线程下载源代码

    本文将深入探讨如何使用Java实现多线程下载,并通过"Java实现多线程下载源代码"这一主题,详细解析其背后的原理和实践方法。 首先,我们要理解什么是多线程。在单线程环境下,程序执行是顺序的,一次只能执行一个...

    java实现的多线程端口扫描程序

    在这个场景中,我们讨论的是一个基于Java实现的多线程端口扫描程序。端口扫描是网络安全和网络管理中的常见操作,用于发现远程主机上开放的服务和端口。这种程序可以帮助系统管理员检查网络的脆弱性,定位潜在的安全...

    java多线程编程

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程将深入探讨Java多线程的各个方面...

    java超时控制

    4. **多线程超时** 在多线程环境下,可以使用`Thread.join(long timeout)`方法,让当前线程等待指定时间,如果目标线程还未结束,就返回,避免死锁。 5. **数据库连接超时** 数据库连接池如C3P0或HikariCP允许...

    java多线程.pdf

    ### Java多线程知识点详解 #### 一、Java多线程概述 **Java多线程**是指在Java程序中能够同时执行多个线程的技术。这种技术使得程序可以在多个任务之间并发执行,从而提高了程序的效率和资源利用率。本文将根据...

    JAVA多线程端口扫描器

    通过学习和实践这个Java多线程端口扫描器项目,开发者不仅可以深化对Java多线程编程的理解,还能掌握网络通信和并发控制的关键技能。此外,对于网络安全分析和服务器管理等领域也有实际的应用价值。

    java 多线程编程指南

    总之,“Java多线程编程指南”将涵盖这些核心概念,并可能深入到高级话题,如线程池的优化、并发容器的使用以及并发编程的最佳实践,帮助读者提升在多线程环境下的编程能力。通过深入学习和实践,开发者能够构建出...

Global site tag (gtag.js) - Google Analytics