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

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

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

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

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

查了大量资料后发现,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秒后执行下一命令的方法。 ...

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

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

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

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

    java定时执行代码.

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

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

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

Global site tag (gtag.js) - Google Analytics