有一个需求,就是当一个方法执行超时的时候就中断该方法.
java的超时实现,在网上搜到的大部分是:
方法1.(由于不能达到预想的目的 就不列出来了)
实现描述:使用一个守护线程作为计时器,并且在计时结束时抛出一个未检测异常。
方法2.
用join,就是在主线程里开一个子线程(t),在子线程里去处理超时任务,主线程t.join(3000),3000为要等待的时间(ms),如果子线程没有超时则正常继续执行,如果超时了则中断该子线程t.interrupt();
代码如下:
public class ThreadTest {
public static void main(String[] args) {
CounterThread ct = new CounterThread(5000);
System.out.println("start...");
System.out.println("ct start...");
ct.start();
System.out.println("ct join...");
try {
ct.join(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(ct.isAlive());
ct.interrupt();
System.out.println(ct.isAlive());
System.out.println("the result is " + ct.getResult());
}
}
class CounterThread extends Thread {
private int time;
public CounterThread(int time) {
this.time = time;
}
private int result;
public int getResult() {
return result;
}
public void run() {
try {
Thread.sleep(time);
System.out.println(Thread.currentThread().getName()
+ " is blocked for " + time + "ms");
} catch (InterruptedException ex) {
}
result = 5;
}
}
这种方式是可以的,其实还有另外一种方式,就是
public class TimeoutTest1 {
public static void main(String[] args) {
final ExecutorService service = Executors.newFixedThreadPool(1);
TaskThread taskThread = new TaskThread();
System.out.println("提交任务...begin");
Future<Object> taskFuture = service.submit(taskThread);
System.out.println("提交任务...end");
try {
System.out.println("get .... begin");
Object re = taskFuture.get(1000, TimeUnit.MILLISECONDS);
System.out.println(re);
System.out.println("get .... end");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
System.out.println("超时 取消任务");
taskFuture.cancel(true);
System.out.println("超时 取消任务OK");
}finally{
System.out.println("关闭服务");
service.shutdown();
System.out.println("关闭服务OK");
}
}
}
class TaskThread implements Callable<Object> {
public Object call() throws Exception {
String result = "空结果";
try {
System.out.println("任务开始....");
Thread.sleep(5000);
result = "正确结果";
System.out.println("任务结束....");
} catch (Exception e) {
System.out.println("Task is interrupted!");
}
return result ;
}
}
分享到:
相关推荐
本文将深入探讨Java中如何实现单个线程的执行超时监控。 首先,我们可以使用`java.util.concurrent`包中的`Future`和`ExecutorService`来实现线程超时。`ExecutorService`是一个接口,它提供了管理和控制线程池的...
Java中实现线程的超时中断方法实例 概述:在 Java 中实现线程的超时中断是非常重要的,特别是在熔断降级组件中。熔断降级组件需要在指定的超时时间内中断请求线程,以避免请求长时间阻塞系统资源。在这篇文章中,...
Java实现任务超时处理方法 Java实现任务超时处理方法是指在Java中对超时任务的处理,主要有两种方式:基于异步任务结果的超时获取和使用延时任务来终止超时操作。 基于异步任务结果的超时获取是通过使用Future对象...
本文将深入探讨如何使用Java的线程机制来实现程序执行的超时控制,同时也会涉及基本数据类型、反射以及它们在超时控制中的应用。 首先,我们要理解Java中的线程。线程是程序的执行单元,每个线程都有自己的执行路径...
综上所述,这个示例展示了如何在Java Web应用程序中实现一个用户登录超时过滤器,并通过`web.xml`配置文件进行管理。过滤器通过检查会话状态来决定是否允许用户访问受保护的资源,并且可以灵活地配置登录页面和读取...
除了这种方式,我们还可以利用`java.util.Timer`类和`TimerTask`来实现超时控制。`Timer`类可以调度定时任务,而`TimerTask`是执行这些任务的实体。以下是一个简单的示例: ```java Timer timer = new Timer(); ...
### Java线程超时控制实现详解 #### 一、引言 在开发过程中,经常会遇到需要对线程执行时间进行限制的情况,例如与远程数据库的交互或网络数据的下载等耗时操作。为了提高程序的健壮性和用户体验,合理地控制这些...
Java实现CMPP协议是将中国移动通信的CMPP(China Mobile Peer to Peer)协议转化为Java语言进行编程的一种技术。CMPP协议主要用于短信中心(SMSC)与短信网关之间的通信,支持大量并发的短信发送和接收操作,是移动...
在Java中实现商城订单超时取消功能,主要是利用了JDK中的`DelayQueue`数据结构。`DelayQueue`是一个无界的阻塞队列,它仅允许存放实现了`Delayed`接口的元素,这些元素只有在到达指定延迟时间后才能被取出。这种特性...
7. **异常处理**:在实现SMTP邮件发送时,要处理各种可能的网络和协议错误,如连接失败、认证错误、超时等。这通常通过捕获和处理`IOException`、`AuthenticationFailedException`等异常来实现。 8. **关闭资源**:...
在IT领域,尤其是在Java编程中,访问网络、下载文件、实现爬虫功能以及处理超时问题是非常关键的技术点。本文将深入探讨如何在Java中有效处理这些方面的问题,特别是超时处理解决方案,这对于构建高效、稳定的网络...
Java超时订单管理系统是一款基于Java技术开发的系统,主要用于处理电商平台中的超时未支付订单,确保交易流程的高效和顺畅。这个系统的核心功能是监控订单状态,一旦发现订单超过预设的支付时间限制,就会自动进行...
Java代码实现短信猫发送短信是一项常见的通信应用,主要利用了串行通信技术。短信猫,又称GSM调制解调器,是一种硬件设备,通过USB或串口与计算机连接,可以实现短信的收发功能。在Java编程环境中,我们可以利用Java...
Java Swing 实现的考勤工时计算工具是一个基于桌面应用的程序,专为处理和计算员工的出勤时间而设计。这个工具的核心功能是接收Excel报表中的考勤数据,然后利用SQLite数据库进行存储和处理,以得出精确的工作小时...
在Java编程中,为了保持数据库连接的活性,避免因长时间无操作导致的连接超时问题,我们可以使用定时器(Timer)来定期执行某些任务,比如心跳检测。下面将详细讲解如何利用Java定时器实现这一功能。 首先,我们...
Java作为一种广泛使用的编程语言,提供了丰富的库和框架来实现各种功能,包括文本翻译。本篇将深入探讨如何利用Java实现多语言翻译。 首先,实现翻译功能的关键在于接入翻译API。常见的翻译API有Google Translate ...
在这个项目中,"Java实现远程桌面"是一个使用纯Java编程语言编写的远程桌面解决方案,它使得用户能够在一台计算机上操控另一台计算机,无论它们之间的距离有多远。下面我们将深入探讨这个项目的相关知识点: 1. **...
在Java环境中实现CMPP2.0协议,可以让我们更好地理解和控制短信服务的流程。 一、CMPP2.0协议简介 CMPP2.0协议是基于TCP/IP通信协议栈的,它定义了SP和SCP之间的数据交互格式和规则。协议主要包括连接建立、消息...
至此,我们已经实现了使用Spring Boot和RabbitMQ来监控订单超时并自动关闭的功能。这个方案不仅有助于优化系统性能,还能降低系统复杂性,因为订单超时处理与主要业务流程分离,成为了一个独立的异步任务。 通过...
在Java中实现文件传输功能是一个广泛的话题,涉及到网络编程和数据传输的许多基础知识。本知识点将围绕Java网络编程中的Socket通信和文件传输的实现原理进行详细探讨。 1. Java网络编程基础 Java网络编程提供了两个...