我现在需要一个这样的实现:
1.有一个独立的线程负责监听inputStream,程序会阻塞在read方法上,有数据时读取,并处理,然后再次阻塞,片段如下:
while(true){
byte[] bs=new byte[512];
  if(inputStream.read(bs)>0){
     //处理
   }
}
2.另有主线程提供send方法,可随时被调用,并由上述1中的子线程监听到响应并处理,代码段如下:
public void send(String msg){
outputStream.write(msg.getBytes());
}
3.希望对send之后的响应有一个超时机制,就是主线程调用send之后,如果xx秒后子线程没有接到响应,就超时处理,打断read方法的阻塞,跳出该循环,子线程结束。本来是在子线程的while处用一个标志位进行控制的,可其实read方法还是阻塞在那,根本执行不到下一次循环,所以改标志位没用,我是希望有个设计方法能立即终止read的阻塞,还请大大们指教

解决方案 »

  1.   

    读取之后就把inputStream 关闭如何?这样就不阻塞了吧…………其实,楼主说的我没大明白……一起期待高手出现吧……
      

  2.   

    可以使用线程的interrupt,会让一切blocking的方法抛出异常而返回
      

  3.   

    传统 socket 获得的 io流是不可中断阻塞    , 可以用 socketChannel
      

  4.   


    ServerSocket ss = new ServerSocket();
    ss.setSoTimeout(30000);
    这个可以设置超时
      

  5.   

    pubic void send(String msg){byte[] bs = new byte[512];
    boolean flag = true;
    outputStream.Write(msg.getBytes());
    long timeout = 2000;
    targetTime = system.currenttimemillis()+timeout;
    do{
    if(system.currenttimemillis()>targettime){
    flag = false;
    break;
    }
    try{
    Thread().sleep(10);
    }
    catch(InterruptedException e){
    }}
    while(inputstream.read(bs)==-1)while(flag){
    if(inputstream.read(bs)>0){
    //处理;
    }
    }
    }
    我对楼主的意思的理解是这样的,不知道对不对,可以参考一下
      

  6.   

    也可以把超时那块放在while(flag)里面