`
rabby
  • 浏览: 164965 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

java程序执行超时

阅读更多

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;
	}
 
分享到:
评论
1 楼 Technoboy 2011-05-25  
引用

result = futureTask.get(timeOut, unit);  

等待1,而线程sleep 5,所以TimeoutException,catch住后
引用
futureTask.cancel(true);  

导致线程InterruptedException,
所以TimeoutException,null,InterruptedException

相关推荐

    Java程序执行超时——Future接口介绍

    Java程序执行超时——Future接口介绍

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

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

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

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

    Java线程超时监控

    本文将深入探讨Java中如何实现单个线程的执行超时监控。 首先,我们可以使用`java.util.concurrent`包中的`Future`和`ExecutorService`来实现线程超时。`ExecutorService`是一个接口,它提供了管理和控制线程池的...

    java超时控制

    在Java编程中,超时控制是一项关键的技术,用于确保程序执行不会无限制地等待某个操作完成,例如网络请求、数据库查询或线程同步等。它主要用于避免程序因长时间阻塞而引发的性能问题或者死锁状况。这篇我们将深入...

    java 访问网络 下载文件 爬虫 超时处理解决方案

    在IT领域,尤其是在Java编程中,访问网络、下载文件、实现爬虫功能以及处理超时问题是非常关键的技术点。本文将深入探讨如何在Java中有效处理这些方面的问题,特别是超时处理解决方案,这对于构建高效、稳定的网络...

    Java定时器的使用 Java程序

    在Java程序设计中,定时器常常用于实现周期性的任务,比如定时备份数据、定时检查系统状态或者定时发送通知等。本篇文章将深入探讨Java定时器的使用方法和关键概念。 ### 1. Java定时器类介绍 Java定时器类`Timer`...

    java 程序的退出的资源

    下面我们将深入探讨Java程序的退出方式、相关的系统退出码、异常处理以及如何优雅地终止程序。 首先,Java程序有两种主要的退出方式:正常退出和异常退出。正常退出通常通过`System.exit(int status)`方法实现,...

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

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

    java web开发中大量数据导出Excel超时(504)问题解决

    在Java Web开发中,当需要将大量数据导出到Excel文件时,可能会遇到超时(如504错误)的问题。这种问题通常是由于服务器处理时间过长,超过了Web服务器或应用服务器设置的超时限制。以下是一些解决此类问题的方法和...

    JAVA程序与PLC之间的通信

    6. **异步通信**:为了提高效率,常常使用异步通信模式,使得Java程序在等待PLC响应的同时可以执行其他任务。 7. **源代码分析**:压缩包中的参考源代码可以帮助理解实际的实现过程,包括如何构造请求、解析响应,...

    java网络爬虫连接超时解决实例代码

    Java 网络爬虫连接超时解决方案 Java 网络爬虫连接超时是指在网络爬虫过程中,因服务器端未响应或响应超时而导致的连接失败问题。这种问题经常会发生在网络爬虫程序中,影响爬虫的稳定性和效率。下面我们将通过一...

    Java HttpURLConnection超时和IO异常处理

    在Java编程中,`HttpURLConnection` 是用于执行HTTP请求的核心类,它提供了基本的网络连接功能,包括设置超时和处理可能出现的IO异常。在上述的代码示例中,开发者试图通过HTTP GET方法从指定的URL获取数据。下面将...

    安全的编写多线程的_Java_应用程序

    - **定义**: 线程是程序执行流的最小单元,是进程内的一个执行实体。一个程序或进程可以包含多个线程,这些线程可以根据程序的代码执行相应的指令。 - **特性**: 多线程可以模拟并行执行,提高程序效率;线程之间...

    操作系统进程调度仿真java程序

    在这个特定的“操作系统进程调度仿真java程序”中,我们关注的是操作系统中的一个重要概念——进程调度。进程调度是操作系统内核的重要组成部分,它负责选择一个就绪状态的进程在CPU上执行,并控制进程的上下文切换...

    基于Java+netty内置时间轮工具处理大批量定时或超时任务工具源码.zip

    Java和Netty是两个在IT领域中非常重要的技术。Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在这个项目中,我们关注的是如何利用Netty内置的时间轮(Time...

    java调用modem执行at指令

    当我们谈论“Java调用Modem执行AT指令”时,实际上是在讨论如何通过Java程序控制Modem来发送和接收特定的控制命令。AT指令集是Modem的基本通讯协议,由一系列简短的ASCII字符串组成,用于配置Modem的参数或指示其...

    完整版 Java高级教程 Java语言程序设计 第2章 Java多线程(共24页).ppt

    多线程是Java编程中的关键概念,它允许程序同时执行多个任务,从而提高了程序的效率和响应性。在Java中,多线程主要用于处理并发操作,如在网络编程、GUI应用、数据库操作等场景。 **进程与线程** 1. **进程**:...

    JAVA写的端口扫描程序

    在JAVA中,多线程可以同时执行多个任务,提高程序效率。`Thread`类是JAVA提供用于创建和管理线程的类,线程间通信可能使用`synchronized`关键字、wait/notify机制或`java.util.concurrent`包中的工具。 3. **TCP...

Global site tag (gtag.js) - Google Analytics