我在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)
有人可以帮忙吗? 感谢
答案 0 :(得分:6)
你可能在另一端有问题。 InputStream上的read()是一个阻塞操作 - 来自javadoc(http://java.sun.com/javase/6/docs/api/):“此方法阻塞,直到输入数据可用,检测到流的末尾,或者抛出异常。”
另一端的服务器是否响应?你知道它是否发送了什么?
编辑:为了使它更清晰,线程处于RUNNABLE状态,所以你没有陷入僵局 - 这听起来就像你认为的那样,但是没有任何证据证明存在任何僵局。