Java 这是关于httpclient的死锁吗?

Java 这是关于httpclient的死锁吗?,java,multithreading,request,httpclient,Java,Multithreading,Request,Httpclient,最近,我的程序在发布http请求时死机,下面是线程转储 java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:152) at java.net.SocketInputStream.read(SocketInputStream.j

最近,我的程序在发布http请求时死机,下面是线程转储

   java.lang.Thread.State: RUNNABLE
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:152)
    at java.net.SocketInputStream.read(SocketInputStream.java:122)
    at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:136)
    at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:152)
    at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:270)
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:140)
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:57)
    at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:260)
    at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:161)
    at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:153)
    at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:271)
    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:123)
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:254)
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195)
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86)
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:214)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:160)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:136)
    at com.peony.crawler.core.LoginController.testLogin(LoginController.java:109)
    at com.peony.crawler.core.LoginController.getLogin(LoginController.java:69)
    - locked <0x00000000f0938a08> (a com.peony.crawler.core.LoginController)
    at com.peony.crawler.core.CrawlerTaskService.getLogin(CrawlerTaskService.java:76)
    at com.peony.crawler.core.CrawlerTask.getLogin(CrawlerTask.java:162)
    at com.peony.crawler.core.CrawlerTask.craw(CrawlerTask.java:77)
    at com.peony.crawler.core.CrawlerTask.run(CrawlerTask.java:70)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
java.lang.Thread.State:可运行
位于java.net.SocketInputStream.socketRead0(本机方法)
位于java.net.SocketInputStream.read(SocketInputStream.java:152)
位于java.net.SocketInputStream.read(SocketInputStream.java:122)
位于org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:136)
位于org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:152)
位于org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:270)
位于org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:140)
位于org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:57)
位于org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:260)
位于org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:161)
位于org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:153)
位于org.apache.http.protocol.HttpRequestExecutor.doReceiverResponse(HttpRequestExecutor.java:271)
位于org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:123)
位于org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:254)
位于org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195)
位于org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86)
位于org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
位于org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
在org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
在org.apache.http.impl.client.CloseableHttpClient.execute上(CloseableHttpClient.java:214)
在org.apache.http.impl.client.CloseableHttpClient.execute上(CloseableHttpClient.java:160)
在org.apache.http.impl.client.CloseableHttpClient.execute上(CloseableHttpClient.java:136)
位于com.painy.crawler.core.LoginController.testLogin(LoginController.java:109)
位于com.painy.crawler.core.LoginController.getLogin(LoginController.java:69)
-锁定(com.painy.crawler.core.LoginController)
位于com.painy.crawler.core.CrawlerTaskService.getLogin(CrawlerTaskService.java:76)
位于com.painy.crawler.core.CrawlerTask.getLogin(CrawlerTask.java:162)
位于com.painy.crawler.core.CrawlerTask.craw(CrawlerTask.java:77)
位于com.painy.crawler.core.CrawlerTask.run(CrawlerTask.java:70)
位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
在java.util.concurrent.FutureTask.run(FutureTask.java:262)处
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
运行(Thread.java:745)
有没有人曾经和我遇到过同样的问题? 谁能帮我找出这一切发生的原因?
我使用的httpclient版本是4.3.5
我的jvm版本是Java HotSpot(TM)64位服务器VM(构建24.60-b09,混合模式)
我的操作系统版本是CentOS 6.5版(最终版)

多谢各位

请求可能超时,你的线程可运行。但它如何解释它在这里被阻止超过三个小时,并且没有迹象表明它将返回。我将连接超时和套接字超时都设置为30秒。这可能是由你等待的条件引起的。我最近遇到了一个类似的问题,当我删除所有被“阻止”的代码时,问题得到了修复。最后我找到了这个问题的原因。httpclient没有默认的连接超时和套接字超时。当我为他们设置一个合适的超时时,问题就解决了!有一个问题。我在一个房间里找到的。