7

HttpUrlConnectionを作成し、BufferedInputStreamを介して読み取るTomcatで実行されているスレッドがあります。

一部のURLのデータをフェッチした後、停止します。HttpUrlConnectionがロックされ、BufferedInputStreamもロックされているというプロセスのjstackを取得しました。

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

誰かがここで助けてもらえますか。ありがとう

4

1 に答える 1

6

おそらくもう一方の端に問題があります。InputStreamのread()はブロッキング操作です-javadoc(http://java.sun.com/javase/6/docs/api/)から: "このメソッドは、入力データが利用可能になるまで、ストリームの終わりをブロックしますが検出されるか、例外がスローされます。」

反対側のサーバーは応答していますか?それが何かを送ったかどうか知っていますか?

編集:明確にするために、スレッドはRUNNABLE状態にあるため、デッドロックは発生していません。これは、あなたが考えていることのように聞こえますが、デッドロックの証拠はありません。

于 2010-06-08T19:06:47.677 に答える