`
rabby
  • 浏览: 163457 次
  • 性别: 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上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java开源包4

    在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...

    java开源包101

    在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...

    java开源包11

    在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...

    java开源包6

    在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...

    java开源包9

    在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...

    java开源包5

    在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...

    java开源包8

    在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...

    java开源包10

    在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...

    java开源包3

    在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...

    java开源包1

    在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...

    java-sproc-wrapper:Java存储过程包装器:从Java调用PostgreSQL存储过程

    支持水平数据库分片(分区/访问逻辑位于应用程序内),可通过注释轻松使用pg_advisory_lock以确保单个Java节点执行,每个存储过程可配置的语句超时以及PostgreSQL类型(包括枚举和hstore)。用法要使用SProcWrapper...

    java开源包2

    在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...

    java开源包7

    在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...

    Java资源包01

    在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...

Global site tag (gtag.js) - Google Analytics