使用Guava的SimpleTimeLimiter类可以实现调用方法超过指定时间后还没返回时中断调用的逻辑。
/** * 基于代理模式实现 */ private static void test1() { ExecutorService executorService = Executors.newCachedThreadPool(); TimeLimiter timeLimiter = new SimpleTimeLimiter(executorService); UserService userService = timeLimiter .newProxy(new UserServiceImpl(), UserService.class, 1500, TimeUnit.MILLISECONDS); try{ String name = userService.getName(); System.out.println("name=" + name); }catch(Exception ex){ if(ex instanceof UncheckedTimeoutException){ System.out.println("超时:" + ex.getMessage()); }else{ System.out.println(ex.toString()); } }finally{ executorService.shutdown(); } } /** * 基于回调的方式,适合任意的单个方法使用 */ private static void test2(){ ExecutorService executorService = Executors.newCachedThreadPool(); TimeLimiter timeLimiter = new SimpleTimeLimiter(executorService); try{ timeLimiter.callWithTimeout(new Callable<String>() { @Override public String call() throws Exception { TimeUnit.MILLISECONDS.sleep(2000); return "zhang san"; } }, 1000, TimeUnit.MILLISECONDS, true); System.out.println("success"); }catch(Exception ex){ if(ex instanceof UncheckedTimeoutException){ System.out.println("超时:" + ex.getMessage()); }else{ System.out.println(ex.toString()); } }finally{ executorService.shutdown(); } }
public interface UserService { String getName() throws InterruptedException; } public class UserServiceImpl implements UserService { @Override public String getName() throws InterruptedException { TimeUnit.MILLISECONDS.sleep(2000); return "zhang san"; } }
相关推荐
调用接口怎么知道使用的是哪个实现类 Java通过接口调用方法的时候,怎么知道调用的是哪个实现类 当调用接口中的方法时,如何判定用的是哪个实现类 一个接口有多个实现类,怎么知道调用了哪个实现类
JAVA类的方法调用和变量 一、类的分类: 1、普通类 2、抽象类(含有抽象方法的类) 3、静态类(不需要实例化,就可以使用的类) 二、方法的分类: 1、私有方法(只有类的内部才可以访问的方法) 2、保护方法(只有...
Android+Java中使用RSA加密实现接口调用时的校验功能的工具类.rar Android+Java中使用RSA加密实现接口调用时的校验功能的工具类.rar
1.动态调用类方法,模拟VB中的CallByName 2.附带了C#和VB的代码 3.主要是一个项目中用到了要调用很多参数和返回值相同的一系列函数,所以 想到了这个方法,不用重复的写方法名,使用循环调用
C++中,一个类需要调用另外一个类的数据成员时,经常不知道怎么做,这里整理了两种方法,来实现在一个类中调用另外一个类的数据成员。
C++,C 包含类两个类互相调用彼此的类成员变量和方法,里面介绍了如何在头文件中创建相互的类对象,简单易懂
通过java类的路径实例化类并调用方法:仅仅知道类的路径,就可以实例化对象,利用反射机制调用其方法
c++ 类的互相调用的方法,是今天弄明白的,这里提供例子和说明给大家参考,从而告诉大家C++中类与类之间的关系,是不能烂用乱用的.希望能给大家启发.
64位机进行C#二次开发调用DLL(使用PCOMM控件)实现方法
(八)线程--借助 封装类 实现“线程调用带参数方法”
网页调用摄像头实现二维码扫描功能,很强大,,,网上搜的很多H5调用MUI的二维码扫描功能都用不了,不支持,。这个很强大,实现了网页调用摄像头进行二维码扫描功能,帅!
该文件中是一段js调用 浏览器的 打印功能 实践, 其中 详细的说明和注释。 但是 如果你需要调用起打印机 的话, 则需要用户先行 绑定打印机设备, 确保可以在打印页面选择打印机, 适用大部分浏览器。
三种方式实现java远程调用(rmi) 方式一:原始方式 方式二:spring 方式三:jndi 解压,放到myeclipse上可用
C#调用java类、jar包方法C#调用java类、jar包方法C#调用java类、jar包方法C#调用java类、jar包方法C#调用java类、jar包方法。
一个用JSP实现的分页的类及调用方法 一个用JSP实现的分页的类及调用方法 一个用JSP实现的分页的类及调用方法
WPF继承_子类继承父类,实现跨类调用方法
Winform中使用CefSharp和js互相调用方法,Winform中使用CefSharp和js互相调用方法,Winform中使用CefSharp和js互相调用方法,Winform中使用CefSharp和js互相调用方法 vs2019.debug目录下有cef所需要的文件,在其他...
编写计算器类,实现加法、减法操作 使用JAVA反射机制动态调用计算器对象的加法,减法函数
QML调用C++方法, C++调用QML,C++发送信号QML接收