public class MethodTest {
/**
* 要测试的方法
* @return
*/
public String test() {
try {
Thread.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "test";
}
}
public static void main(String[] args) {
MethodTest test = new MethodTest();
Callable<String> call = getCallable("test", test, (Object[])null);
String result = testFuture(call, 1, TimeUnit.MILLISECONDS);
System.out.println(result);
}
/**
*
* @param <T>
* @param methodName 要执行的方法名
* @param obj 方法所在的对象
* @param args 方法的参数
* @return
*/
public static <T> Callable<T> getCallable(final String methodName,final Object obj,final Object ... args){
Callable<T> call = new Callable<T>() {
@SuppressWarnings("unchecked")
public T call() throws Exception {
Method method= obj.getClass().getMethod(methodName, (Class[])null);
return (T) method.invoke(obj,args);
}
};
return call;
}
/**
*
* @param <T>
* @param call
* @param timeOut 超时时间
* @param unit 时间单位
* @return
*/
public static <T> T testFuture(Callable<T> call,int timeOut,TimeUnit unit){
ExecutorService executorService = Executors.newSingleThreadExecutor();
FutureTask<T> futureTask = new FutureTask<T>(call);
executorService.execute(futureTask);
T result = null;
try {
result = futureTask.get(timeOut, unit);
} catch (InterruptedException e) {
futureTask.cancel(true);
e.printStackTrace();
} catch (ExecutionException e) {
futureTask.cancel(true);
e.printStackTrace();
} catch (TimeoutException e) {
futureTask.cancel(true);
e.printStackTrace();
} finally {
executorService.shutdown();
}
return result;
}
分享到:
相关推荐
Java程序执行超时——Future接口介绍
在Java编程中,控制程序执行超时是一项重要的任务,特别是在多线程环境下,我们可能需要确保某个任务不会无限制地运行下去,导致资源耗尽。本文将深入探讨如何使用Java的线程机制来实现程序执行的超时控制,同时也会...
在Java编程中,控制程序执行超时是一项关键任务,特别是在多线程环境下,我们需要确保某个任务不会无限期地运行,导致资源浪费或者阻塞其他重要任务。本篇将深入探讨如何利用Java的线程和定时器(Timer)来实现这个...
本文将深入探讨Java中如何实现单个线程的执行超时监控。 首先,我们可以使用`java.util.concurrent`包中的`Future`和`ExecutorService`来实现线程超时。`ExecutorService`是一个接口,它提供了管理和控制线程池的...
在Java编程中,超时控制是一项关键的技术,用于确保程序执行不会无限制地等待某个操作完成,例如网络请求、数据库查询或线程同步等。它主要用于避免程序因长时间阻塞而引发的性能问题或者死锁状况。这篇我们将深入...
在IT领域,尤其是在Java编程中,访问网络、下载文件、实现爬虫功能以及处理超时问题是非常关键的技术点。本文将深入探讨如何在Java中有效处理这些方面的问题,特别是超时处理解决方案,这对于构建高效、稳定的网络...
在Java程序设计中,定时器常常用于实现周期性的任务,比如定时备份数据、定时检查系统状态或者定时发送通知等。本篇文章将深入探讨Java定时器的使用方法和关键概念。 ### 1. Java定时器类介绍 Java定时器类`Timer`...
下面我们将深入探讨Java程序的退出方式、相关的系统退出码、异常处理以及如何优雅地终止程序。 首先,Java程序有两种主要的退出方式:正常退出和异常退出。正常退出通常通过`System.exit(int status)`方法实现,...
### Java线程超时控制实现详解 #### 一、引言 在开发过程中,经常会遇到需要对线程执行时间进行限制的情况,例如与远程数据库的交互或网络数据的下载等耗时操作。为了提高程序的健壮性和用户体验,合理地控制这些...
在Java Web开发中,当需要将大量数据导出到Excel文件时,可能会遇到超时(如504错误)的问题。这种问题通常是由于服务器处理时间过长,超过了Web服务器或应用服务器设置的超时限制。以下是一些解决此类问题的方法和...
6. **异步通信**:为了提高效率,常常使用异步通信模式,使得Java程序在等待PLC响应的同时可以执行其他任务。 7. **源代码分析**:压缩包中的参考源代码可以帮助理解实际的实现过程,包括如何构造请求、解析响应,...
Java 网络爬虫连接超时解决方案 Java 网络爬虫连接超时是指在网络爬虫过程中,因服务器端未响应或响应超时而导致的连接失败问题。这种问题经常会发生在网络爬虫程序中,影响爬虫的稳定性和效率。下面我们将通过一...
在Java编程中,`HttpURLConnection` 是用于执行HTTP请求的核心类,它提供了基本的网络连接功能,包括设置超时和处理可能出现的IO异常。在上述的代码示例中,开发者试图通过HTTP GET方法从指定的URL获取数据。下面将...
- **定义**: 线程是程序执行流的最小单元,是进程内的一个执行实体。一个程序或进程可以包含多个线程,这些线程可以根据程序的代码执行相应的指令。 - **特性**: 多线程可以模拟并行执行,提高程序效率;线程之间...
在这个特定的“操作系统进程调度仿真java程序”中,我们关注的是操作系统中的一个重要概念——进程调度。进程调度是操作系统内核的重要组成部分,它负责选择一个就绪状态的进程在CPU上执行,并控制进程的上下文切换...
Java和Netty是两个在IT领域中非常重要的技术。Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在这个项目中,我们关注的是如何利用Netty内置的时间轮(Time...
当我们谈论“Java调用Modem执行AT指令”时,实际上是在讨论如何通过Java程序控制Modem来发送和接收特定的控制命令。AT指令集是Modem的基本通讯协议,由一系列简短的ASCII字符串组成,用于配置Modem的参数或指示其...
多线程是Java编程中的关键概念,它允许程序同时执行多个任务,从而提高了程序的效率和响应性。在Java中,多线程主要用于处理并发操作,如在网络编程、GUI应用、数据库操作等场景。 **进程与线程** 1. **进程**:...
在JAVA中,多线程可以同时执行多个任务,提高程序效率。`Thread`类是JAVA提供用于创建和管理线程的类,线程间通信可能使用`synchronized`关键字、wait/notify机制或`java.util.concurrent`包中的工具。 3. **TCP...