【发布时间】:2015-08-11 10:40:07
【问题描述】:
我开发了一个向客户端发送请求的客户端。当请求将被发送时,客户端将启动一个线程来接收来自服务器的消息。出于模拟的目的,我阻止了服务器的响应,因此线程将运行并尝试从服务器听到。但我的线程没有反应。这是一些代码:
void getResponse(){
System.out.println("###always hearing###");
BufferedReader bStreamReader=null;
try {
bStreamReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String responseLine=null;
System.out.println("--------------------------------------------");
while((responseLine=bStreamReader.readLine())!=null){
getResponse_status=true;
System.out.println("getResponse_status: "+getResponse_status);
System.out.println(responseLine);
}
System.out.println("--------------------------------------------");
System.out.println("client:reading from server finished");
bStreamReader.close();
System.out.println("###finish hearing###");
//System.exit(0);
} catch (IOException e){
e.printStackTrace();
}
}
@Override
public void run() {
//run method of thread
getResponse();
}
//
getResponse() 方法将在 while 循环中阻塞。通常,如果服务器不发送任何内容,则变量 responseLine 将等于 null。这意味着不会执行while循环,因为执行条件不正确。但是 getResponse() 将在 while 循环中被阻止。我确定服务器什么也没发送。那么为什么我的程序在while循环中被阻塞了呢?
【问题讨论】:
-
你从哪里开始线程?
-
如果服务器没有发送任何第一个
readLine()块等待接收end-of-input字符。所以我会说它阻塞是正确的。
标签: java multithreading