`
raymond.chen
  • 浏览: 1441184 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用SimpleTimeLimiter类实现方法限时调用功能

 
阅读更多

使用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";
	}
}

 

分享到:
评论

相关推荐

    C#动态调用类方法

    1.动态调用类方法,模拟VB中的CallByName 2.附带了C#和VB的代码 3.主要是一个项目中用到了要调用很多参数和返回值相同的一系列函数,所以 想到了这个方法,不用重复的写方法名,使用循环调用

    在一个类中调用另一个类的数据成员的方法-程序实现

    `CallingClass` 的 `callAccessFunction` 方法调用这个友元函数,实现对 `TargetClass` 数据成员的访问。友元函数提供了更灵活的访问权限控制,但可能破坏类的封装性,因此使用时需谨慎。 总结来说,选择哪种方式取...

    c# winform webbrowser页面中js调用winform类方法

    这个过程通常涉及到JavaScript(js)调用WinForm类的方法,以实现一些特定功能或者获取数据。本文将深入探讨如何实现这一功能,并基于提供的"jsInWebBrowserCallCSharpMethod"示例进行详细解释。 首先,我们需要...

    使用spring远程调用服务端接口实现WebService功能

    在Java EE平台上,Spring框架提供了一种强大的方式来实现远程服务调用,特别是通过其HttpInvokerServiceExporter组件来实现基于HTTP的WebService功能。这个技术允许客户端和服务端通过HTTP协议进行通信,实现远程...

    C#调用java类、jar包方法

    本篇将详细阐述如何在C#环境中实现对Java类的调用以及使用Java的jar包。 首先,要理解C#与Java之间的互操作性是通过Java Native Interface (JNI) 实现的,但直接使用JNI会非常复杂。为简化这个过程,我们可以借助...

    C#调用C++DLL导出类

    在.NET环境中,C#代码通常与C++代码交互是通过平台调用(P/Invoke)或托管C++来实现的。然而,当涉及到C++动态链接库(DLL)中的类时,情况会变得稍微复杂一些。本文将详细介绍如何在C#中调用C++DLL中的类,以及如何...

    Winform中使用CefSharp和js互相调用方法

    Winform中使用CefSharp和js互相调用方法,Winform中使用CefSharp和js互相调用方法,Winform中使用CefSharp和js互相调用方法,Winform中使用CefSharp和js互相调用方法 vs2019.debug目录下有cef所需要的文件,在其他...

    c#调用微信扫一扫及其他功能,包含自己写的微信帮助类.cs

    此外,`调用微信功能.txt`文件可能是对如何使用`wxHelper.cs`类的详细说明,包括如何初始化对象,如何调用各个方法,以及可能出现的问题和解决策略。这通常会包含示例代码,帮助开发者快速上手。 总的来说,这个...

    C#中在一个窗体里调用另一个窗体的方法

    这包括了创建窗体实例、通过按钮点击事件触发方法、使用事件委托进行通信以及通过显示对话框调用窗体等技术手段。这些方法不仅能够帮助开发者有效地管理应用程序的结构,还能够提高代码的可维护性和可扩展性。在实际...

    qt编程下实现点击按钮调用外部程序

    本文将详细介绍如何在Qt中实现这一功能,并提供相关的代码示例。 首先,我们要了解Qt中的信号与槽机制。这是Qt框架的核心特性,允许我们在对象之间建立连接,当特定事件(如按钮被点击)发生时,可以触发预定义的...

    C#调用Windows自身的API开发摄像头拍照和摄像功能

    代码的结构可能包含一个主窗体类,其中定义了调用API的方法,以及响应用户操作的事件处理程序。 总之,C#调用Windows API进行摄像头操作虽然涉及较多底层细节,但通过合理的封装和抽象,可以使代码保持清晰和易于...

    VC的DLL类导出后,用Delphi调用方法及源码

    本主题主要探讨如何在Visual C++(VC)中创建一个DLL,并导出类,然后在Delphi环境中调用这些类的方法。以下是详细的知识点解释: 1. **VC的DLL类导出**: 在VC中创建DLL时,我们需要定义一个或多个类,并通过`__...

    C#实现调用视频摄像头录像和抓拍

    本项目聚焦于使用C#编程语言实现调用视频摄像头进行录像和抓拍功能,这在安全监控、远程协作、家庭自动化等多个场景中都有广泛的应用。 首先,我们要了解C#如何操作硬件资源。在.NET框架中,Microsoft提供了`System...

    QT创建与调用Dll方法(包括类成员)--显式调用.rar

    在QT中创建和调用DLL,关键在于正确地导出类和方法,并使用QLibrary进行加载和方法调用。这个过程涉及到编译选项的配置、头文件的声明、库的链接以及运行时的动态加载。通过以上步骤,我们可以实现QT应用程序对DLL的...

    android实现限时抢购

    在Android平台上实现限时抢购功能是一项常见的需求,特别是在电商应用中。这个功能通常涉及动态更新的商品列表、每个商品的倒计时展示以及相应的交互逻辑。接下来,我们将详细探讨如何利用ListView来实现这一功能。 ...

    [测试通过]JAVA调用第三方DLL的简单方法:JNA及DEMO

    在Java中,由于其跨平台的特性,原生与操作系统交互并不直接,而JNA提供了一种桥接机制,使得Java可以直接调用Windows、Linux等操作系统中的DLL文件,实现对操作系统功能的访问。 【JNA简介】 JNA提供了一种高级...

    java调用C#封装的dll方法

    - **实现Java调用:** 在`COMTest_Start`类中实现调用C++ DLL的方法。 **技术要点:** - 需要注意C#和Java中的数据类型转换问题,特别是字符串类型的处理。 - 确保C++项目启用了CLR支持。 - JNA的配置与使用。 ##...

    如何用Java回调和线程实现异步调用.pdf

    LongTimeWorker类是实现异步调用的一个示例类,通过增加构造方法和run方法来实现限时线程回调方式。构造方法中创建了一个定时器,每秒钟计时一次,如果超时时间到了则终止线程和广播超时消息。run方法中线程一启动...

    dwr dwr项目 js 调用 java 后台 方法 js调用java后台方法 后台方法 异步

    下面将详细阐述DWR的工作原理、配置过程以及如何使用DWR实现JS调用Java后台方法。 1. **DWR概述** DWR的核心功能是提供一种安全、高效的远程方法调用机制,通过HTTP协议在客户端(浏览器)和服务器之间传递数据。...

    调用浏览器打印按钮,实现打印页面功能

    调用浏览器打印按钮,实现打印页面功能,可以实现二次开发

Global site tag (gtag.js) - Google Analytics