HttpURLConnection被锁定

时间:2010-06-08 16:35:24

标签: java locking httpurlconnection

我在tomcat下运行一个线程,它创建一个HttpUrlConnection并通过BufferedInputStream读取它。

获取某些网址的数据后,它会停止。我得到了进程的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 个答案:

答案 0 :(得分:6)

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

另一端的服务器是否响应?你知道它是否发送了什么?

编辑:为了使它更清晰,线程处于RUNNABLE状态,所以你没有陷入僵局 - 这听起来就像你认为的那样,但是没有任何证据证明存在任何僵局。