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通过线程控制程序执行超时,多线程,反射
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...
在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...
在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...
在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...
在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...
在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...
在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...
在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...
在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...
在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...
在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...
支持水平数据库分片(分区/访问逻辑位于应用程序内),可通过注释轻松使用pg_advisory_lock以确保单个Java节点执行,每个存储过程可配置的语句超时以及PostgreSQL类型(包括枚举和hstore)。用法要使用SProcWrapper...
在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...
在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...
在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程...