`
lydawen
  • 浏览: 464640 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

控制程序运行时间或外部接口调用超时时间

    博客分类:
  • java
 
阅读更多

 

 

  经常在运行一个新线程或调用第三方接口时存在一个问题,即线程在预计的时间内没有成功结束而导致程序失控。调用第三方系统,因为网络超时或对方响应速度异常导致己方系统异常的问题在开发中时常遇到。通过下面代码旨在解决类似问题。需要注意的时,虽然返回了,但实际那个线程还是在运行的。

 

 

 

 

import java.util.Calendar;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;


public class TestCallable {

	private static ExecutorService executor=Executors.newCachedThreadPool(new ThreadFactory() {
		int ncount=0;
		@Override
		public Thread newThread(Runnable r) {
			ncount++;
			Thread invokeThread=new Thread(r);
			invokeThread.setName("Invoker-thread-"+ncount);
			invokeThread.setDaemon(true);
			return invokeThread;
		}
	});
	
	public static void callSth(Runnable task,TimeUnit unit,long timeout)throws Exception{
		Future<?> futureResult=executor.submit(task);
		futureResult.get(timeout, unit);
	}
	
	public static void main(String[] args) {
		
		System.out.println(1<<2);
		
		Runnable rb=new Runnable() {
			@Override
			public void run() {
				TestCallable tc=new TestCallable();
				tc.dosth();//模拟调用外部接口
			}
		};
		//5秒超时
		try {
			long s=Calendar.getInstance().getTimeInMillis();
			callSth(rb,TimeUnit.MILLISECONDS,5000);
			System.out.println("运行时间:"+(Calendar.getInstance().getTimeInMillis()-s));
		} catch (Exception e) {//抓这两个异常更准确,纯粹模拟为省事就抓老大了。InterruptedException, TimeoutException 
			System.err.println("调用外部接口超时了!");
		}
		//模拟2秒超时
		try {
			callSth(rb,TimeUnit.MILLISECONDS,2000);
		} catch (Exception e) {//抓这两个异常更准确,纯粹模拟为省事就抓老大了。InterruptedException, TimeoutException 
			System.err.println("调用外部接口超时了!");
		}
	}
	
	public void dosth(){//模拟外部接口
		try {
			System.out.println("开始睡觉");
			Thread.sleep(2500);
			System.out.println("睡醒了");
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
 
 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Windows 系统错误代码简单分析

     0117 该应用程序所运行的 IOCTL 调用不正确。  0118 校验写入的开关参数值不正确。  0119 系统不支持所请求的命令。  0120 该系统上不支持此功能。  0121 标记已超时。  0123 文件名、目录名或卷标...

    java开源包1

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    TCPIP详解--共三卷

    18.3.1 第一次超时时间 178 18.3.2 服务类型字段 179 18.4 最大报文段长度 179 18.5 TCP的半关闭 180 18.6 TCP的状态变迁图 182 18.6.1 2MSL等待状态 183 18.6.2 平静时间的概念 186 18.6.3 FIN_WAIT_2状态 186 18.7...

    易语言程序免安装版下载

    即,新版支持库可被旧版易语言或易程序使用,旧版支持库也可被新版易语言或易程序使用(只是不支持静态编译)。  静态编译后的易语言EXE/DLL之间不能再共享譬如窗口、窗口组件等类似资源,对于已经静态连接到一个...

    精通ANDROID 3(中文版)1/2

    2.6.1 加载和运行Notepad应用程序  2.6.2 分解应用程序  2.7 了解应用程序生命周期  2.8 调试应用程序  2.8.1 启动模拟器  2.8.2 StrictMode  2.8.3 参考资料  2.9 小结  第3章 使用Android资源  ...

    精通Android 3 (中文版)2/2

    2.6.1 加载和运行Notepad应用程序  2.6.2 分解应用程序  2.7 了解应用程序生命周期  2.8 调试应用程序  2.8.1 启动模拟器  2.8.2 StrictMode  2.8.3 参考资料  2.9 小结  第3章 使用Android资源  ...

    TCP_IP详解卷1

    18.3.1 第一次超时时间 178 18.3.2 服务类型字段 179 18.4 最大报文段长度 179 18.5 TCP的半关闭 180 18.6 TCP的状态变迁图 182 18.6.1 2MSL等待状态 183 18.6.2 平静时间的概念 186 18.6.3 FIN_WAIT_2状态 186 18.7...

    TCPIP详解卷[1].part04

    18.3.1 第一次超时时间 178 18.3.2 服务类型字段 179 18.4 最大报文段长度 179 18.5 TCP的半关闭 180 18.6 TCP的状态变迁图 182 18.6.1 2MSL等待状态 183 18.6.2 平静时间的概念 186 18.6.3 FIN_WAIT_2状态 186 18.7...

    TCPIP详解卷[1].part09

    18.3.1 第一次超时时间 178 18.3.2 服务类型字段 179 18.4 最大报文段长度 179 18.5 TCP的半关闭 180 18.6 TCP的状态变迁图 182 18.6.1 2MSL等待状态 183 18.6.2 平静时间的概念 186 18.6.3 FIN_WAIT_2状态 186 18.7...

    TCPIP详解卷[1].part03

    18.3.1 第一次超时时间 178 18.3.2 服务类型字段 179 18.4 最大报文段长度 179 18.5 TCP的半关闭 180 18.6 TCP的状态变迁图 182 18.6.1 2MSL等待状态 183 18.6.2 平静时间的概念 186 18.6.3 FIN_WAIT_2状态 186 18.7...

    TCPIP详解卷[1].part05

    18.3.1 第一次超时时间 178 18.3.2 服务类型字段 179 18.4 最大报文段长度 179 18.5 TCP的半关闭 180 18.6 TCP的状态变迁图 182 18.6.1 2MSL等待状态 183 18.6.2 平静时间的概念 186 18.6.3 FIN_WAIT_2状态 186 18.7...

    TCPIP详解卷[1].part06

    18.3.1 第一次超时时间 178 18.3.2 服务类型字段 179 18.4 最大报文段长度 179 18.5 TCP的半关闭 180 18.6 TCP的状态变迁图 182 18.6.1 2MSL等待状态 183 18.6.2 平静时间的概念 186 18.6.3 FIN_WAIT_2状态 186 18.7...

    TCP/IP详解part_2

    18.3.1 第一次超时时间 178 18.3.2 服务类型字段 179 18.4 最大报文段长度 179 18.5 TCP的半关闭 180 18.6 TCP的状态变迁图 182 18.6.1 2MSL等待状态 183 18.6.2 平静时间的概念 186 18.6.3 FIN_WAIT_2状态 186 18.7...

    TCPIP详解卷[1].part08

    18.3.1 第一次超时时间 178 18.3.2 服务类型字段 179 18.4 最大报文段长度 179 18.5 TCP的半关闭 180 18.6 TCP的状态变迁图 182 18.6.1 2MSL等待状态 183 18.6.2 平静时间的概念 186 18.6.3 FIN_WAIT_2状态 186 18.7...

    TCPIP详解卷[1].part11

    18.3.1 第一次超时时间 178 18.3.2 服务类型字段 179 18.4 最大报文段长度 179 18.5 TCP的半关闭 180 18.6 TCP的状态变迁图 182 18.6.1 2MSL等待状态 183 18.6.2 平静时间的概念 186 18.6.3 FIN_WAIT_2状态 186 18.7...

    TCPIP详解卷[1].part12

    18.3.1 第一次超时时间 178 18.3.2 服务类型字段 179 18.4 最大报文段长度 179 18.5 TCP的半关闭 180 18.6 TCP的状态变迁图 182 18.6.1 2MSL等待状态 183 18.6.2 平静时间的概念 186 18.6.3 FIN_WAIT_2状态 186 18.7...

    TCPIP详解卷[1].part07

    18.3.1 第一次超时时间 178 18.3.2 服务类型字段 179 18.4 最大报文段长度 179 18.5 TCP的半关闭 180 18.6 TCP的状态变迁图 182 18.6.1 2MSL等待状态 183 18.6.2 平静时间的概念 186 18.6.3 FIN_WAIT_2状态 186 18.7...

    TCPIP详解卷[1].part10

    18.3.1 第一次超时时间 178 18.3.2 服务类型字段 179 18.4 最大报文段长度 179 18.5 TCP的半关闭 180 18.6 TCP的状态变迁图 182 18.6.1 2MSL等待状态 183 18.6.2 平静时间的概念 186 18.6.3 FIN_WAIT_2状态 186 18.7...

    精易模块[源码] V5.15

    2、改善“程序_禁止重复运行”添加是否显示已运行的参数,此命令由易友【@小爬虫】改进。 3、修正“网页_取网址引用”不支持Https和mms地址协议问题,感谢易友【@小爬虫】反馈。 4、修正“文件_改扩展名”当后缀名...

    FreeBSD操作系统设计与实现

    3.6.2 外部表示 3.6.3 调整时间 3.6.4 时间间隔 3.7 用户、用户组和其他身份标识 3.7.1 主机标识符 3.7.2 进程组和会话 3.8 资源服务 3.8.1 进程优先级 3.8.2 资源利用 3.8.3 资源限制 3.8.4 文件系统配额 3.9 系统...

Global site tag (gtag.js) - Google Analytics