我现在需要一个这样的实现:
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,程序会阻塞在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的阻塞,还请大大们指教
解决方案 »
- 如何在代码中配置log4j的环境?
- 谁有java的nio的HTTPParser!如果有请联系我!500分送上!
- jdbc的问题
- 急问:如何在没有java环境的客户端机器上运行网页上嵌入的applet,要求不下载jre。
- 怎样把字符串变为程序语句执行?
- 紧急求救——如何在JAVA中调用微软的COM组件?
- 网页设计要用java吗?我想学java
- 请教JAVA高手一个JBUILDER中关于GUI设计的一个问题::有分赠送
- 有人用java做服务器端,用c++builder做客户端,进行数据报socket通讯过?我碰到疑问
- 请问有关java的最好中文网站有哪些?
- swing中如何屏蔽掉windows的快捷键?
- 这个警告是怎么回事?
ServerSocket ss = new ServerSocket();
ss.setSoTimeout(30000);
这个可以设置超时
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){
//处理;
}
}
}
我对楼主的意思的理解是这样的,不知道对不对,可以参考一下