7

我有一个在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)

有人可以在这里帮忙。谢谢

4

1 回答 1

6

你可能在另一端有问题。InputStream 上的 read() 是一个阻塞操作 - 来自 javadoc ( http://java.sun.com/javase/6/docs/api/ ):“此方法阻塞,直到输入数据可用,流结束检测到,或抛出异常。”

另一端的服务器有响应吗?你知道它是否发送了任何东西吗?

编辑:为了更清楚,线程处于 RUNNABLE 状态,所以你没有死锁 - 听起来你就是这么想的,但这里没有任何死锁的证据。

于 2010-06-08T19:06:47.677 回答