HttpURLConnection становится заблокированным - PullRequest
6 голосов
/ 08 июня 2010

У меня есть поток, работающий под tomcat, который создает HttpUrlConnection и читает его через BufferedInputStream.

После получения данных для некоторых URL-адресов он останавливается. Я получил jstack процесса, который говорит, что HttpUrlConnection заблокирован, а BufferedInputStream также заблокирован.

"http-8080-1" daemon prio=10 tid=0x08683400 nid=0x79c9 runnable [0x8f618000]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
        - locked <0x956ef8c0> (a java.io.BufferedInputStream)
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1072)
        - locked <0x956ef910> (a sun.net.www.protocol.http.HttpURLConnection)

Может ли кто-нибудь помочь здесь. Спасибо

1 Ответ

6 голосов
/ 08 июня 2010

Возможно, у вас проблема на другом конце. read () для InputStream - это операция блокировки из javadoc (http://java.sun.com/javase/6/docs/api/): ". Этот метод блокируется до тех пор, пока не будут доступны входные данные, не будет обнаружен конец потока или возникнет исключение."

Сервер на другом конце отвечает? Вы знаете, отправлено ли что-нибудь?

edit: Чтобы прояснить ситуацию, поток находится в состоянии RUNNABLE, так что вы не зашли в тупик - похоже, это то, о чем вы думаете, но здесь нет никаких доказательств какого-либо тупика.

...