一个古老的io问题
当我调用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




