java中处理http连接超时的方法
声明一个boolean公共变量,表明当前httpconnection是否得到服务器回应。
你的连接线程中在连接之前置这个变量为false;
另起一个监视线程,拿到那个HttpConnection的连接对象,并循环监视这个boolean公共变量。如果指定时间内(20秒后)你的 boolean公共变量还是false,那么就主动置httpconnection=null.这样,那边连接线程就会抛出异常退出来。托福答案 www.jszdsy.com
写了Timer类来实现。(学习国外一个网站上的写法)
class Timer extends Thread {
/** 每个多少毫秒检测一次 */
protected int m_rate = 100;
/** 超时时间长度毫秒计算 */
private int m_length;
/** 已经运行的时间 */
private int m_elapsed;
/**
* 构造函数
*
* @param length
* Length of time before timeout occurs
*/
public Timer(int length) {
// Assign to member variable
m_length = length;
// Set time elapsed
m_elapsed = 0;
}
/**
* 重新计时
*
*/
public synchronized void reset() {
m_elapsed = 0;
System.out.println("reset timer");
}
/**
* 故意设置为超时,可以在服务器有返回,但是错误返回的时候直接调用这个,当成超时处理
*
*/
public synchronized void setTimeOut()
{
m_elapsed = m_length+1;
}
/**
*/
public void run() {
// 循环 www.yzyxedu.com
System.out.println("timer running");
for (;;) {
// Put the timer to sleep
try {
Thread.sleep(m_rate);
} catch (InterruptedException ioe) {
continue;
}
synchronized (this) {
// Increment time remaining
m_elapsed += m_rate;
// Check to see if the time has been exceeded
if (m_elapsed > m_length && !isConnActive) { //isConnActive 为全局变量
// Trigger a timeout
timeout();
break;
}
}
}
}
/**
* 超时时候的处理
*
*/
public void timeout() {
httpConnection = null;
System.out.println("conn time > " + TIME_OUT + " ms");
}
}
在http连接线程调用的同是调用 new Timer(20*1000)。start();
需要重新计时时候调用timer.reset();
java中处理http连接超时的方法的更多相关文章
- java中常用的字符串的截取方法
java中常用的字符串的截取方法 1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int l ...
- Linux Vsftpd 连接超时解决方法
Linux Vsftpd 连接超时解决方法 2013-11-13 10:58:34| 分类: 默认分类|举报|字号 订阅 解决方法(http://www.lingdus.com/thread ...
- java中获取日期和时间的方法总结
1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下: 要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...
- java中遍历map对象的多种方法
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有ma ...
- Java中的五种单例模式实现方法
[代码] Java中的五种单例模式实现方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 2 ...
- 谈谈java中遍历Map的几种方法
java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点 先初始化一个map public ...
- Java中产生随机数的两个方法
Java中产生随机数的两个方法 一.利用random方法来生成Java随机数. 在Java语言中生成Java随机数相对来说比较简单,因为有一个现成的方法可以使用.在Math类中,Java语言提供了一个 ...
- Java中创建数组的几种方法
Java中创建数组的几种方法 public static void main(String[] args) { //创建数组的第一种方法 int[] arr=new int[6]; int intVa ...
- Java中遍历map的四种方法 - 转载
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...
随机推荐
- 如何仿写thinkphp的S方法?
代码如下: <?php $info=S("name","lizhaoyao"); $name=S("name"); var_dump( ...
- 【转】java 文件 读取目录下的所有文件(包括子目录)
转自:http://www.cnblogs.com/pricks/archive/2009/11/11/1601044.html import java.io.File; import java.io ...
- 数据库事务的ACID和BASE
ACID versus BASE for database transactions解释了ACID和BASE的区别.如下: ACID: (关系数据库) Atomic: 原子性,一个事务要么全部成功,要 ...
- 用ChooseALicense帮自己选一个开源license,然后用AddALicense给自己的github自动加上license文件
在我之前的一篇博客里面介绍过tl;drLegal ——开源软件license的搜索引擎,可以很方便的查询各种license,并且给出了很简洁的解释.今天又发现了另外一个帮助你选择你的开源软件licen ...
- SuperSocket使用demo
using System;using System.Collections.Generic;using System.Linq;using System.Text;using SuperSocket. ...
- 【设计模式 - 1】之工厂模式(Factory)
1 模式简介 1.1 工厂模式作用 工厂模式解决的是"使用new关键字获取对象造成松耦合"的问题. 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏 ...
- win10安装MySQL
mysql的直接地址,可以复制地址使用下载工具下载:32位:http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.26-win32.zip64位:htt ...
- javascript弹出框打印某个数值时,弹出NaN?(not a number)
一.NaN:表示not a number null 未定义或空字符串 undefined 对象属性不存在 或是声明了变量但从未赋值. 二.出现这种情况有(1)此常数的值是零被零除所得到的结果. (2) ...
- 实战DeviceIoControl 之中的一个:通过API訪问设备驱动程序
P.bhw98 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 9pt; PADDING-BOTTOM: 0px; MARGIN: 10px 0 ...
- 为什么我选择使用 Blocks(块)
扯淡:到了新公司接手新框架之后,发现大量的使用Blocks,之前很多时候都是使用代理,突然面对这个陌生的语法,特地科普总结了一番. 什么是Blocks 一句话概括就是,带有局部变量的匿名函数(即不带名 ...