java中处理http连接超时的方法

java中处理http连接超时的方法

  声明一个boolean公共变量,表明当前httpconnection是否得到服务器回应。
 
   你的连接线程中在连接之前置这个变量为false;
 
   另起一个监视线程,拿到那个HttpConnection的连接对象,并循环监视这个boolean公共变量。如果指定时间内(20秒后)你的 boolean公共变量还是false,那么就主动置httpconnection=null.这样,那边连接线程就会抛出异常退出来。 托福答案
 
   写了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() {
 
   // 循环
 
   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连接超时的方法)