2010-06-08 9 views
6

kilitli kalması.Bir HttpUrlConnection oluşturur ve BufferedInputStream aracılığıyla okur tomcat altında çalışan bir iş parçacığı vardır

bazı URL'ler için veriler alınırken sonra durduktun. HttpUrlConnection'ın kilitli olduğunu ve BufferedInputStream'in de kilitlendiğini söyleyen işlemin jstack'ını aldım.

"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) 

Burada birileri yardımcı olabilir. Teşekkür

cevap

6

Muhtemelen diğer ucunda bir sorun var. Bir inputStream ile() oku bloke işlemdir - javadoc dan (http://java.sun.com/javase/6/docs/api/) "Bu giriş veriler kadar yöntemi engeller, akımın sonu tespit edilirse, veya bir özel durum"

yanıt diğer ucundaki sunucu mı? Bir şey gönderilip gönderilmediğini biliyor musun?

düzenleme: Daha net hale getirmek için, iş parçacığı RUNNABLE durumundadır, bu yüzden kilitlenmezsiniz - işte böyle düşündüğünüze benziyor, ancak herhangi bir kilitlenme hakkında hiçbir kanıt yok. günlükten

+0

buna bazı xyz url okuyor gibi görünüyor. Wget ile denedim ve yanıtı hızlıca alabiliyordum. Read() bloğunun hangi sebepten kaynaklandığından emin değilim. Bir şey daha, 'java.net.HttpURLConnection' ithal ama yığın iz diğer bazı paketi gösterir. Bir ipucu? – Nayn

+0

Apache'nin HTTP İstemcisini denemenizi öneririm: Sun'ın yerine http://hc.apache.org/httpclient-3.x/. Benim de tecrübem yok ama bazı hızlı aramalar Apache'nin daha iyi olduğunu gösteriyor. – nojo

+0

@Nayn: Yığın izindeki "diğer paket" Sun'ın iç uygulamasıdır. – talonx