CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

一个古老的io问题

楼主man_feng()2005-01-18 17:00:35 在 Java / J2SE / 基础类 提问

当我调用in.read()方法发生阻塞时,如何在10秒中内没反应时放弃这个操作那?  
  我得方法是  
        getInputStream(InputStream   in)  
      {  
            //  
            in.read();  
      }  
  问题点数:20、回复次数:5Top

1 楼man_feng()回复于 2005-01-18 17:07:34 得分 0

自己顶一下^_^Top

2 楼eclipse0016(eclipse0016)回复于 2005-01-18 17:18:08 得分 5

在进入方法时启动另一个线程计时,到十秒时interrupt()这个等待输入线程。  
   
  getInputStream(InputStream   in)   {  
       
      //   创建计时线程  
      Runnable   timer   =   new   YourOwnTimer(Thread.getCurrentThread());  
      Thread   thread   =   new   Thread(timer);  
      thread.start();  
       
      //   加一层try   catch   为了InterruptedException  
      in.read();  
      thread.interrupt();   //   读到了自然就不用再打断了  
      //   catch  
  }  
   
  写得很粗,意思到了。不知道有没有什么更好的方法Top

3 楼soarheaven()回复于 2005-01-18 17:32:51 得分 2

虽然部太会,但也要关注一下!  
  解决的方法相信很多,希望楼主自己解决呀!:)Top

4 楼man_feng()回复于 2005-01-18 17:37:01 得分 0

在方法内创建计时线程,是当主线程执行in.reada()是开始计时,是不是把in.read()写到timer中呢?时间到了就interrupt()中断线程,同时thread.setDaeman(true)   这样对嘛?Top

5 楼sci_fi(java)回复于 2005-01-19 08:55:48 得分 13

public   class   Test   {  
  class   MyTimer   implements   Runnable{  
  private   long   startTime   =   0;  
  private   long   endTime   =   0;  
  // bStart   =   true,表示超时,false表示继续等待  
  private   boolean   bStart   =   false;  
  private   long   waitTime   =   5*1000;  
   
  public   MyTimer(){}  
  public   boolean   getBStart(){  
  return   this.bStart;  
  }  
  public   void   setBStart(){  
  while(bStart   ==   true){  
  endTime   =   System.currentTimeMillis();  
  if(endTime-startTime>=waitTime)  
  this.bStart   =   false;  
  else  
  this.bStart   =   true;  
  }  
  }  
  /*   (非   Javadoc)  
    *   @see   java.lang.Runnable#run()  
    */  
   
  public   void   run()   {  
  this.setBStart();  
  Thread.interrupted();  
  }  
  }  
  public   void   getInfo(InputStream   in)  
  {  
  MyTimer   timer   =   new   MyTimer();  
  Thread   thread   =   new   Thread(timer);  
  thread.setDaemon(true);  
  thread.start();  
  }  
  }  
   
  这回该满意了吧!^_^Top

相关问题

  • io
  • 一个古老的问题...
  • Port IO
  • 一个比较古老的问题
  • 古老的recordcount问题,急,在线等。
  • 关于古老的UCDOS的问题
  • 一个非常古老的问题。
  • 提个古老的PCHAR问题
  • 一个很古老的问题
  • 当XP遇到古老的TC时

关键词

  • 线程
  • bstart
  • mytimer
  • thread
  • 计时
  • 方法
  • endtime
  • timer
  • interrupted
  • runnable

得分解答快速导航

  • 帖主:man_feng
  • eclipse0016
  • soarheaven
  • sci_fi

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo