`
helloqiner
  • 浏览: 24446 次
  • 来自: ...
文章分类
社区版块
存档分类

设置一段代码执行的超时时间的简单方法

阅读更多
前段时间在搞一个批量处理程序,涉及到多线程操作。但是后台服务很不给力,并发一大常常就挂了,长时间不给返回,导致我的程序也挂死在那里……

那么能不能设置一段代码执行的超时时间呢?如果处理超时就忽略该错误继续向下执行。

可是在网上搜了大半天,找到的都是无用的代码,根本不能用。

查了大量资料后发现,java早已经给我们提供了解决方案。jdk1.5自带的并发库中Future类就能满足这个需求。Future类中重要方法包括get()和cancel()。get()获取数据对象,如果数据没有加载,就会阻塞直到取到数据,而 cancel()是取消数据加载。另外一个get(timeout)操作,表示如果在timeout时间内没有取到就失败返回,而不再阻塞。

到这里,此问题就迎刃而解了。废话不多说,直接上代码:
public class ThreadTest {

	public static void main(String[] args) throws InterruptedException,
			ExecutionException {
		
		final ExecutorService exec = Executors.newFixedThreadPool(1);
		
		Callable<String> call = new Callable<String>() {
			public String call() throws Exception {
				//开始执行耗时操作
				Thread.sleep(1000 * 5);
				return "线程执行完成.";
			}
		};
		
		try {
			Future<String> future = exec.submit(call);
			String obj = future.get(1000 * 1, TimeUnit.MILLISECONDS); //任务处理超时时间设为 1 秒
			System.out.println("任务成功返回:" + obj);
		} catch (TimeoutException ex) {
			System.out.println("处理超时啦....");
			ex.printStackTrace();
		} catch (Exception e) {
			System.out.println("处理失败.");
			e.printStackTrace();
		}
		// 关闭线程池
		exec.shutdown();
	}
}

注意,以上代码需要 1.5 以上的 jdk 才可编译。
执行后可以发现抛出了 TimeoutException ,打印出了"处理超时啦...." 的文字,在此处可进行超时后的处理。
分享到:
评论
2 楼 380071587 2013-08-05  
学习了,太好了
1 楼 宋建勇 2012-07-23  
nice

相关推荐

    为jquery的ajax请求添加超时timeout时间的操作方法

    主要介绍了为jquery的ajax请求添加超时timeout时间的操作方法,文中通过一段简单的代码给大家介绍jquery ajax超时设置方法,感兴趣的朋友跟随脚本之家小编一起看看吧

    代码超时,中断进程

    一段代码如果比较耗时,超过一定时间后,自动中断,继续向下执行。

    线程超时死掉

    解决线程的死掉问题和超时问题特别好使,在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent...

    MSSQL 大量数据时,建立索引或添加字段后保存更改提示超时的解决方法

    一时不知所措,蜡人张的文章 代码如下: 修改表属性后使用“索引/键”对话框为一个大型表(记录数13,239,473)创建索引,提示: – 无法创建索引“IX_TableName”。 超时时间已到。在操作完成之前超时时间已过或...

    python使用装饰器和线程限制函数执行时间的方法

    这段代码可以用来限制函数的执行时间,只需要在函数的上方添加一个装饰器,timelimited(2)就可以限定函数必须在2秒内执行完成,如果执行完成则返回函数正常的返回值,如果执行超时则会抛出错误信息。 # -*- coding:...

    JavaScript SetInterval与setTimeout使用方法详解

    它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码。不过这两个函数还是有区别的,setInterval在执行完一次代码之后,经过了那个固定的时间...

    php脚本运行时的超时机制详解

    在做php开发的时候,经常会设置max_input_time、max_execution_time,用来控制脚本的超时时间。但却从来没有思考过背后的原理。 趁着这两天有空,研究一下这个问题。 超时配置 php的ini配置如何起作用,这是一个...

    JavaScript setInterval()与setTimeout()计时器

     超时调用使用window对象的setTimeout()方法,它接受两个参数:要执行的代码和以毫秒表示的时间(代码执行前的等待时间)。其中,第一个参数可以是一个字符串(和eval&#40;&#41;中使用的字符串一样),也可以是一个...

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

    显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个目标文件 摘要:Java源码,网络相关,浏览器 Java编写的HTML浏览器源代码,一个很简单甚至不算是浏览器的HTML浏览器,使用方法: 可直接...

    JavaScript定时器setTimeout()和setInterval()详解

    顾名思义,超时调用的意思就是在一段实际之后调用(在执行代码之前要等待多少毫秒) setTimeout()他可以接收两个参数: 1.要执行的代码或函数 2.毫秒(在执行代码之前要等待多少毫秒) function test(){ alert&#40...

    Windows 系统错误代码简单分析

    Microsoft Windows 系统错误代码简单分析:  0000 操作已成功完成。  0001 错误的函数。  0002 系统找不到指定的文件。  0003 系统找不到指定的路径。  0004 系统无法打开文件。  0005 拒绝访问。...

    PHP中利用sleep函数实现定时执行功能实现代码

    在一些竞猜的网站中,如果我们需要做一个定时执行的功能,比如有一道题,在十秒之内要完成,否则显示“您已超时”,如果...请看下面一段代码: &lt;?php // current time echo date('h:i:s') . \n; // sleep for 10 s

    精易模块[源码] V5.15

    6、修正“窗口_枚举所有子窗口”当过滤类名输入空符号或一段空文本后无法枚举的BUG,感谢易友【vibu】反馈. 7、改名“编码_Ansi到十进制_文本”源作者重新改名为“编码_Ansi到ASCII_文本型”。 8、字节集_还原,新版...

    JavaScript定时器详解及实例

    setTimeout 运用在延迟一段时间,再进行某项操作。 setTimeout(“function”,time) 设置一个超时对象 setInterval(“function”,time) 设置一个超时对象 SetInterval为自动重复,setTimeout不会重复。 clearTimeout...

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

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

    精讲RestTemplate自定义请求失败异常处理.docx

    异常抛出之后,程序后面的代码就执行不到了,无法进行后面的代码执行。实际的业务开发中,有的时候我们更期望的结果是:不管你服务端是超时了还是服务不存在,我们都应该获得最终的请求结果(HTTP请求结果状态400、...

    java-servlet-api.doc

    在卸载一个Servlet之前,Servlet引擎必须等待所有的service()方法完成或超时结束(Servlet引擎会对超时作出定义)。当一个Servlet被卸载时,引擎将不能给Servlet发送任何请求。引擎必须释放Servlet并完成无用存储...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第一阶段20讲、同步代码块以及同步方法之间的区别和关系.mp4 │ 高并发编程第一阶段21讲、通过实验分析This锁的存在.mp4 │ 高并发编程第一阶段22讲、通过实验分析Class锁的存在.mp4 │ 高并发编程...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段20讲、同步代码块以及同步方法之间的区别和关系.mp4 │ 高并发编程第一阶段21讲、通过实验分析This锁的存在.mp4 │ 高并发编程第一阶段22讲、通过实验分析Class锁的存在.mp4 │ 高并发编程...

Global site tag (gtag.js) - Google Analytics