您可以實現自己的「緊密」讀取流(小緩衝區大小值,例如,一次8個字節)而不是readLine並在迭代中聲明您的超時。 除此之外,當您阻止IO(在下例中的in.read調用中被阻止)時,您無法做很多事情。當一個線程在IO上被阻塞時,它不會對中斷做出反應。
long timeout = 30000l; //30s
int bufferSize = 8;
ByteArrayOutputStream out = new ByteArrayOutputStream(bufferSize);
try {
long start = System.currentTimeMillis();
int byteCount = 0;
byte[] buffer = new byte[bufferSize];
int bytesRead = -1;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
byteCount += bytesRead;
if (System.currentTimeMillis() > start + timeout) {
//timed out: get out or throw exception or ....
}
}
out.flush();
return byteCount;
} ... catch ... finally ....
好問題。我多次面對這個問題,但還沒有一個好的解決方案。 – roehrijn
[如何在Java servlet容器上指定Http請求超時參數](http://stackoverflow.com/questions/1414795/how-to-specify-http-request-timeout-parameter-on-java-servlet-容器) – Raedwald