Ich habe einen Thread unter Tomcat, die eine HttpUrlConnection erstellt und liest es über BufferedInputStream.HttpURLConnection wird gesperrt
Nach dem Abrufen von Daten für einige URLs blockiert es. Ich habe den Jstack des Prozesses, der HttpUrlConnection gesperrt ist und BufferedInputStream auch gesperrt ist.
"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)
Könnte jemand hier helfen. Danke
Aus dem Protokoll scheint es, dass es von einigen xyz URL liest. Ich versuchte es mit wget und konnte schnell die Antwort bekommen. Ich bin mir nicht sicher, aus welchem Grund das read() blockieren würde. Eine weitere Sache, ich importierte 'java.net.HttpURLConnection', aber die Stack-Trace zeigt ein anderes Paket. Irgendeine Ahnung? – Nayn
Ich würde vorschlagen, Apache HTTP Client zu versuchen: http://hc.apache.org/httpclient-3.x/ anstelle von Sun's. Ich habe keine Erfahrung mit beiden, aber einige schnelle Suche deutet darauf hin, dass Apache viel besser ist. – nojo
@Nayn: Das "andere Paket" im Stack-Trace ist die interne Implementierung von Sun. – talonx