Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpURLConnection正在被锁定_Java_Locking_Httpurlconnection - Fatal编程技术网

Java HttpURLConnection正在被锁定

Java HttpURLConnection正在被锁定,java,locking,httpurlconnection,Java,Locking,Httpurlconnection,我有一个在tomcat下运行的线程,它创建了一个HttpUrlConnection并通过BufferedInputStream读取它 在获取某些URL的数据后,它会暂停。我得到了进程的jstack,它说HttpUrlConnection被锁定,BufferedInputStream也被锁定 "http-8080-1" daemon prio=10 tid=0x08683400 nid=0x79c9 runnable [0x8f618000] java.lang.Thread.State:

我有一个在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)
“http-8080-1”守护程序prio=10 tid=0x08683400 nid=0x79c9 runnable[0x8f618000]
java.lang.Thread.State:可运行
位于java.net.SocketInputStream.socketRead0(本机方法)
位于java.net.SocketInputStream.read(SocketInputStream.java:129)
在java.io.BufferedInputStream.fill处(BufferedInputStream.java:218)
位于java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
在java.io.BufferedInputStream.read处(BufferedInputStream.java:317)
-锁定(java.io.BufferedInputStream)
位于sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)
位于sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1072)
-锁定(sun.net.www.protocol.http.HttpURLConnection)
有人能帮忙吗。
谢谢

另一端可能有问题。InputStream上的read()是一个阻塞操作-来自javadoc():“此方法阻塞,直到输入数据可用、检测到流结束或引发异常为止。”

另一端的服务器是否有响应?你知道有没有什么消息吗


编辑:更清楚地说,线程处于可运行状态,因此您没有死锁-听起来像是您认为的那样,但这里没有任何死锁的迹象。

从日志中可以看出,它似乎是从某个xyz url读取的。我尝试使用wget,很快就能得到响应。我不确定read()阻塞的原因是什么。还有一件事,我导入了
java.net.HttpURLConnection
,但堆栈跟踪显示了其他一些包。有什么线索吗?我建议试试Apache的HTTP客户端:而不是Sun的。我在这两方面都没有经验,但一些快速搜索表明Apache的要好得多。@Nayn:堆栈跟踪中的“其他包”是Sun的内部实现。@nojo我遇到了同样的问题,您能确认问题在另一端吗?