Java:HTTP连接创建的等待连接线程持续很长时间

我有一个服务器端代码,用于检查SOAP服务是否已启动。 代码如下:

String response = ""; while (response.length() == 0) { try { final URL url = new URL("DummySoapServiceURL"); final HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection(); InputStream inputStream = null; try { httpConnection.setRequestMethod("GET"); inputStream = httpConnection.getInputStream(); final byte[] buffer = new byte[BUFFER_SIZE]; while (inputStream.read(buffer, 0, BUFFER_SIZE) != -1) { response = new String(buffer); } } finally { IOUtils.closeQuietly(inputStream); httpConnection.disconnect(); } } catch (MalformedURLException e) { // error handling } catch (IOException e) { // error handling } } 

现在的问题是,每次检查大约会创建3-4个连接线程。 即使SOAP服务检查完成,这些线程仍然存在。 这些线程的线程转储快照如下所示:

 "http-host/ip:port-11" prio=10 tid=0x00000000064f0000 nid=0x32cc waiting on condition [0x00002b54bc604000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for  (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util.net.NioEndpoint$DefaultThreadFactory$1$1.run(NioEndpoint.java:1249) at java.lang.Thread.run(Thread.java:744) Locked ownable synchronizers: - None 

现在我不确定为什么这些连接线程正在等待/停放以及如何关闭它们。 在我的代码中,打开的流被关闭,连接断开连接使用disconnect()。

我还尝试设置以下HTTP属性:

 httpConnection.addRequestProperty("Connection", "close"); 

但它没有帮助。 我怀疑在某个时候JAVA可能正在关闭这些线程。 但我不知道,何时以及如何? JDK版本为jdk1.7.0_51_x64。 请告诉我,如何阻止这些连接线程编号的建立?

迁移整个实现以使用apache HTTP客户端,因为它具有特殊的API以便更好地控制。 但它没有帮助。 即使使用apache HTTP客户端,我也可以看到这些等待的连接线程。

最后在redhat网站上找到了关于JBOSS HTTP连接器配置的提示 。 为HTTP连接器配置了线程池,它解决了这个问题:

           .... ....