`
raymond.chen
  • 浏览: 1438200 次
  • 性别: 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++ 包含类两个类互相调用彼此的类成员变量和方法

    在C++编程中,类之间的相互调用是一个常见的设计模式,尤其在实现复杂系统或对象间的协作时。这种设计允许类A访问类B的成员,同时类B也可以访问类A的成员,形成一种循环依赖的关系。然而,这种关系需要谨慎处理,以...

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

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

    .net中attribute实现方法调用拦截(就是aop)

    在.NET中,我们可以通过Attribute来实现AOP的功能,这就是标题中提到的"attribute实现方法调用拦截"。 Attribute的使用通常是通过定义自定义Attribute类,然后在需要的地方应用这些特性。例如,我们可以创建一个`...

    C#调用java类、jar包方法

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

    Yii框架使用魔术方法实现跨文件调用功能示例

    在Yii框架中,可以通过使用魔术方法来实现跨文件调用功能。魔术方法是一些特殊的PHP方法,它们会在特定的事件发生时自动被调用。在Yii框架的面向对象程序设计中,魔术方法可以用来执行一些特殊的操作,例如动态调用...

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

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

    android调用webservice接口实现登陆源码

    在Android开发中,调用Web Service接口是常见的数据交互方式,尤其在实现用户登录功能时。Web Service通常采用SOAP或RESTful API的形式提供服务,允许客户端应用程序(如Android应用)发送请求并接收响应。本教程将...

    SignalR Winform服务端、客户端实现,附带web端调用Demo

    在“SignalR Winform服务端、客户端实现,附带web端调用Demo”这个项目中,我们将探讨如何使用SignalR在Windows窗体应用(Winform)和Web应用之间建立实时通信。该项目包括两个主要部分:服务端和客户端的实现,以及...

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

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

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

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

    android实现限时抢购

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

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

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

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

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

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

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

    tolua++ 版helloworld (lua脚本调用C++类的成员函数方法)

    关于tolua++的资料太少,这个通过实例让你知道如何通过tolua++和C++交互,简单明了。 通过5个文件来演示这个tolua++版 hello world hello.lua ,hello.h ,hello.pkg ,...这个程序实现了脚本调用C++类的成员函数方法

    java中两种方式调用其他.exe可执行程序

    在 Java 中,我们可以使用 `Runtime` 类的 `exec` 方法来调用其他.exe 可执行程序。 例如,在上面的代码中,我们可以看到使用 `Runtime` 类来打开 cmd 命令行的代码: ```java Runtime.getRuntime().exec("cmd /k ...

    LabVIEW调用DLL文件实现USB HID双向通信

    当需要实现特定功能时,可能需要编写或使用现有的DLL文件。接下来将详细介绍如何在LabVIEW中调用自定义DLL文件。 1. **调用库函数节点**: - 在LabVIEW中添加“调用库函数节点”控件,路径为:“互连接口”-&gt;“库与...

    Spring动态加载bean后调用实现方法解析

    在本文中,我们将通过一个示例代码,详细介绍如何使用 Spring 的动态加载 bean 功能来调用实现方法,并解析该过程的每一个步骤。 首先,我们需要在 pom.xml 文件中引入 Spring 的依赖项,以便使用 Spring 的功能。...

    C#调用RDP实现远程桌面共享控制

    在本项目中,我们将探讨如何利用C#编程语言来调用RDP功能,实现远程桌面的共享和控制。 首先,我们要理解C#调用RDP的基本原理。C#中可以借助Windows API(应用程序接口)或.NET Framework中的System.Windows.Forms...

    Qt编写调用网络摄像头完成视频录制、播放、预览、回放功能

    回放功能实现 回放功能本质上也是视频播放,但可能需要额外的控制,比如倒退、快进、暂停等。`QMediaPlayer`提供了一系列的方法来控制播放,例如`pause()`, `stop()`, `setPosition()`等。 ### 6. 实现用户界面 ...

Global site tag (gtag.js) - Google Analytics