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

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

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

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

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

查了大量资料后发现,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时间的操作方法

    timeout: 1000, // 超时时间设置,单位毫秒 type: 'get', // 请求方式,get或post data: {}, // 请求所传参数,json格式 dataType: 'json', // 返回的数据格式 success: function(data) { alert("成功"); }, ...

    Tcpclient连接服务器连接超时设置

    这段代码定义了一个`TcpClientWithTimeout`类,它封装了异步连接过程并设置了超时。`ConnectAsync`方法接收一个`IPEndPoint`对象,表示服务器的IP地址和端口。它创建了一个新的`Socket`对象,然后同时启动连接任务和...

    JS之Session超时提示代码

    ### JS之Session超时提示代码解析 ...此方法简单实用,适用于那些希望减少服务器负担、提高前端响应能力的应用场景。对于开发者而言,掌握这种前端技术有助于更好地管理用户会话,提升应用的安全性和用户体验。

    代码超时,中断进程

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

    php设置页面超时时间解决方法

    这段代码会覆盖php.ini中相应的max_execution_time设置,并只对当前执行的脚本有效。如果在脚本执行过程中需要取消设置的执行时间限制,可以将max_execution_time设置为0。 在使用这些方法设置页面超时时间时,还...

    python中设置超时跳过,超时退出的方式

    执行一条代码时间过长 而且还不报错,卡死在那。还要继续执行下面代码,如何操作。 下面是个简单的实例 pip安装 第三方eventlet这个包 – pip install eventlet import time import eventlet#导入eventlet这个模块 ...

    Python装饰器限制函数运行时间超时则退出执行

    这段代码定义了一个名为`set_timeout`的装饰器工厂,它接受两个参数:超时时间`num`和超时后执行的回调函数`callback`。装饰器内部定义了`handle`函数,当接收到信号`SIGALRM`时,该函数将抛出`RuntimeError`异常。`...

    WPF 超时退出例子

    在Windows Presentation Foundation(WPF)应用程序开发中,有时我们需要实现一种机制,当用户在一段时间内没有进行任何操作时,程序自动退出或进入休眠状态。这种功能常用于节省系统资源,或者在无人操作的安全环境...

    ASP.NET页面请求超时时间设置多种方法

    然而,要注意的是,如果使用了UpdatePanel控件,其内部的请求超时值受页面请求超时时间设置的影响。如果设置超时值大于等于90秒,UpdatePanel内部请求的超时值将被强制设为90秒;如果设置小于90秒,则使用设置的值。...

    线程超时死掉

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

    ASP技巧收集-防asp超时

    这种方法的核心思想是在用户不进行任何操作的情况下,每隔一段时间就自动向服务器发送一次请求,以此来延长会话的有效期。 #### 示例代码详解 下面是一个具体的实现案例: 1. **HTML部分**: ```html &lt;!-- ...

    易语言脚本代码整理

    "执行"可能是指执行一段特定的代码或子程序,而"运行"可能是指启动外部应用程序。这两者都是控制程序流程的关键部分。 以上就是"易语言脚本代码整理"主题中涵盖的一些关键知识点,它们展示了易语言在代码组织、参数...

    距截止日期倒计时及超时 时间

    4. **实时更新**:使用JavaScript的定时器(如setInterval)每隔一段时间(如1秒)重复执行计算和更新显示的操作,以保持倒计时的动态更新。 5. **格式化输出**:将计算出的时间差转换为用户友好的格式,如“天:...

    php页面函数设置超时限制的方法

    可以在脚本中加入以下代码,将特定脚本的最大执行时间设置为300秒: ```php set_time_limit(300); // 设置当前脚本的最大执行时间为300秒 ``` 将此代码行添加在脚本的开始位置,便可以对当前脚本单独设置执行时间...

    Java线程超时控制的实现.docx

    ### Java线程超时控制实现详解 #### 一、引言 在开发过程中,经常会遇到需要对线程...对于需要精细控制某段代码执行时间的情况,推荐使用守护线程的方法;而对于简单的线程超时控制需求,使用`join`方法更为简单直接。

    python等待10秒执行下一命令的方法

    在Python编程中,有时我们需要让程序暂停一段时间再执行后续的操作。这种需求在很多场景中都很常见,比如定时任务、网络爬虫中的请求间隔控制等。本文将详细介绍如何在Python中实现等待10秒后执行下一命令的方法。 ...

    java定时执行代码.

    - `scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)`: 以固定速率重复执行任务,即使前一次执行超时,也不会影响下次执行的时间。 - `scheduleWithFixedDelay(Runnable ...

    C++ TCP客户端非阻塞连接超时测试源码

    在IT领域,网络编程是不可或缺的一部分,特别是在C++这样的系统级编程语言中。TCP(传输控制协议)是一种面向连接的、...通过学习和分析这段代码,开发者可以提升自己在网络编程领域的技能,更好地理解和应用相关技术。

    jQuery基于$.ajax设置移动端click超时处理方法

    click事件在移动设备上会有明显延迟,这是因为移动浏览器会等待一段时间以确定用户是否只是想进行双击缩放,而不是真的想要点击。 因此,开发者往往会选择使用touchstart事件替代click事件,以获得更快的响应速度。...

    ZooKeeper会话超时以及重连机制.pdf

    下面给出一段关键的逻辑代码片段,用于解释ZooKeeper如何处理会话终止的情况: ```java case OpCode.closeSession: // 不需要进行检查,因为会话到期线程已经将此操作加入队列,而无需拥有会话所有权。 // 这个...

Global site tag (gtag.js) - Google Analytics