Hi, Oleg. I fixed it. Thank you. Codes below is nice.


public class HttpClientWithSync {
   public static void main(String[] args) {

      String url = "https://www.baidu.com/";;

      String url1 = 
"http://hc.apache.org/httpcomponents-client-4.5.x/tutorial/html/fundamentals.html";;

      String url2 = "http://news.baidu.com/";;

      String[] strs = new String[] {url, url, url};

      CloseableHttpClient httpclient = HttpClients.createDefault();

      for (int i = 0; i < 3; i++) {
         HttpGet httpget = new HttpGet(strs[i]);
         System.out.println();
         CloseableHttpResponse response = null;
         try {
            System.out.println("Waiting for the contents, hurry! hurry ! 
hurry!.....");

            // take a while and block the main thread.
            response = httpclient.execute(httpget);

            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
               System.out.println("============ Get the entity ============ "+ 
response.getEntity());
            }
            // after getting the value from the url and then do this or do not 
if something unexpected to happen.
            System.out.println("Do some other stuff");
         } catch (IOException e) {
            e.printStackTrace();
         } finally {
            try {
               response.close();
            } catch (IOException e) {
               e.printStackTrace();
            }
         }
      }
   }



> 在 2018年6月11日,下午11:26,zhangminglei <18717838...@163.com> 写道:
> 
> Yes. I know it is leaking connections…. But it can stop the program in the 
> end. If I make the url the same, it can not stop….
> 
>> 在 2018年6月11日,下午11:16,Oleg Kalnichevski <ol...@apache.org 
>> <mailto:ol...@apache.org>> 写道:
>> 
>> On Mon, 2018-06-11 at 23:13 +0800, zhangminglei wrote:
>>> Hi, Oleg.
>>> 
>>> I found the interesting thing. If I change the code like the below,
>>> everything will be fine.
>> 
>> No, it will not. Your code keeps on leaking connections. Please fix it.
>> 
>> Oleg 
>> 
>> 
>>> I just make the url different from one of them. Url, Url1, Url2 .
>>> This time, the program can stoped. Confused…..
>>> 
>>> Minglei.
>>> 
>>> public class HttpClientWithSync {
>>>   public static void main(String[] args) {
>>> 
>>>      String url = "https://www.baidu.com/";;
>>> 
>>>      String url1 = "http://hc.apache.org/httpcomponents-client-4.5.x
>>> /tutorial/html/fundamentals.html";
>>> 
>>>      String url2 = "http://news.baidu.com/";;
>>> 
>>>      String[] strs = new String[] {url, url1, url2};
>>> 
>>>      CloseableHttpClient httpclient = HttpClients.createDefault();
>>> 
>>>      for (int i = 0; i < 3; i++) {
>>>         HttpGet httpget = new HttpGet(strs[i]);
>>>         System.out.println();
>>>         try {
>>>            System.out.println("Waiting for the contents, hurry!
>>> hurry ! hurry!.....");
>>> 
>>>            // take a while and block the main thread.
>>>            HttpResponse response = httpclient.execute(httpget);
>>> 
>>>            if (response.getStatusLine().getStatusCode() ==
>>> HttpStatus.SC_OK) {
>>>               System.out.println("============ Get the entity
>>> ============ "+ response.getEntity());
>>>            }
>>>            // after getting the value from the url and then do this
>>> or do not if something unexpected to happen.
>>>            System.out.println("Do some other stuff");
>>>         } catch (IOException e) {
>>>            e.printStackTrace();
>>>         }
>>>      }
>>>      try {
>>>         httpclient.close();
>>>      } catch (IOException e) {
>>>         e.printStackTrace();
>>>      }
>>>   }
>>> }
>>> 
>>> 
>>>> 在 2018年6月11日,下午10:27,Oleg Kalnichevski <ol...@apache.org> 写道:
>>>> 
>>>> On Mon, 2018-06-11 at 21:12 +0800, zhangminglei wrote:
>>>>> Hi, Oleg,
>>>>> 
>>>>> Thank you for your response, But my question is why this program
>>>>> never stopped ? And always running…
>>>>> 
>>>> 
>>>> The first two requests cause all available connections to get
>>>> leaked.
>>>> All subsequent requests block indefinitely waiting for connections
>>>> to
>>>> become available in the connection pool. 
>>>> 
>>>> Oleg
>>>> 
>>>>> Minglei.
>>>>> 
>>>>>> 在 2018年6月11日,下午8:27,Oleg Kalnichevski <ol...@apache.org> 写道:
>>>>>> 
>>>>>> On Fri, 2018-06-08 at 15:30 +0800, zhangminglei wrote:
>>>>>>> Hi, friends.
>>>>>>> 
>>>>>>> I am using HttpClient for a few tests. And I use the below
>>>>>>> code
>>>>>>> to
>>>>>>> run without success. But the process never stoped. 
>>>>>>> I use jstack for this and found it always wait for something.
>>>>>>> Could
>>>>>>> you help me please ? Thanks.
>>>>>>> 
>>>>>>> parking to wait for <0x000000076c1d0980> (a
>>>>>>> java.util.concurrent.locks.AbstractQueuedSynchronizer$Conditi
>>>>>>> onOb
>>>>>>> ject
>>>>>>> )
>>>>>>> 
>>>>>>> Best
>>>>>>> Minglei
>>>>>>> 
>>>>>>> public class HttpClientWithSync {
>>>>>>> 
>>>>>>>   public static void main(String[] args) {
>>>>>>> 
>>>>>>>      String url = "https://www.baidu.com/";;
>>>>>>> 
>>>>>>>      String[] strs = new String[] {url, url, url};
>>>>>>> 
>>>>>>>      CloseableHttpClient httpclient =
>>>>>>> HttpClients.createDefault();
>>>>>>> 
>>>>>>>      for (int i = 0; i < 3; i++) {
>>>>>>>         HttpGet httpget = new HttpGet(strs[i]);
>>>>>>>         System.out.println();
>>>>>>>         try {
>>>>>>>            System.out.println("Waiting for the contents,
>>>>>>> hurry!
>>>>>>> hurry ! hurry!.....");
>>>>>>> 
>>>>>>>            // take a while and block the main thread.
>>>>>>>            HttpResponse response =
>>>>>>> httpclient.execute(httpget);
>>>>>>> 
>>>>>>>            if (response.getStatusLine().getStatusCode() ==
>>>>>>> HttpStatus.SC_OK) {
>>>>>>>               System.out.println("============ Get the
>>>>>>> entity
>>>>>>> ============ "+ response.getEntity());
>>>>>>>            }
>>>>>>>            // after getting the value from the url and then
>>>>>>> do
>>>>>>> this
>>>>>>> or do not if something unexpected to happen.
>>>>>>>            System.out.println("Do some other stuff");
>>>>>>>         } catch (IOException e) {
>>>>>>>            e.printStackTrace();
>>>>>>>         }
>>>>>>>      }
>>>>>>>      try {
>>>>>>>         httpclient.close();
>>>>>>>      } catch (IOException e) {
>>>>>>>         e.printStackTrace();
>>>>>>>      }
>>>>>>>   }
>>>>>>> }
>>>>>>> 
>>>>>> 
>>>>>> Your code is leaking connections.
>>>>>> 
>>>>>> Please see 
>>>>>> 
>>>>>> http://hc.apache.org/httpcomponents-client-4.5.x/tutorial/html/
>>>>>> fund
>>>>>> amen <http://hc.apache.org/httpcomponents-client-
>>>>>> 4.5.x/tutorial/html/fundamen>
>>>>>> tals.html#d5e145
>>>>>> 
>>>>>> Oleg
>>>>>> 
>>>>>> 
>>>>>>> 
>>>>>>> The full thread dump are
>>>>>>> 
>>>>>>> 2018-06-08 11:02:08
>>>>>>> Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.161-
>>>>>>> b12
>>>>>>> mixed
>>>>>>> mode):
>>>>>>> 
>>>>>>> "Attach Listener" #12 daemon prio=9 os_prio=31
>>>>>>> tid=0x00007fce8904a000
>>>>>>> nid=0x1207 waiting on condition [0x0000000000000000]
>>>>>>>   java.lang.Thread.State: RUNNABLE
>>>>>>> 
>>>>>>> "Service Thread" #10 daemon prio=9 os_prio=31
>>>>>>> tid=0x00007fce8c04b800
>>>>>>> nid=0x5503 runnable [0x0000000000000000]
>>>>>>>   java.lang.Thread.State: RUNNABLE
>>>>>>> 
>>>>>>> "C1 CompilerThread3" #9 daemon prio=9 os_prio=31
>>>>>>> tid=0x00007fce8c002800 nid=0x5303 waiting on condition
>>>>>>> [0x0000000000000000]
>>>>>>>   java.lang.Thread.State: RUNNABLE
>>>>>>> 
>>>>>>> "C2 CompilerThread2" #8 daemon prio=9 os_prio=31
>>>>>>> tid=0x00007fce89084000 nid=0x5103 waiting on condition
>>>>>>> [0x0000000000000000]
>>>>>>>   java.lang.Thread.State: RUNNABLE
>>>>>>> 
>>>>>>> "C2 CompilerThread1" #7 daemon prio=9 os_prio=31
>>>>>>> tid=0x00007fce8c002000 nid=0x4f03 waiting on condition
>>>>>>> [0x0000000000000000]
>>>>>>>   java.lang.Thread.State: RUNNABLE
>>>>>>> 
>>>>>>> "C2 CompilerThread0" #6 daemon prio=9 os_prio=31
>>>>>>> tid=0x00007fce8c001000 nid=0x4d03 waiting on condition
>>>>>>> [0x0000000000000000]
>>>>>>>   java.lang.Thread.State: RUNNABLE
>>>>>>> 
>>>>>>> "Monitor Ctrl-Break" #5 daemon prio=5 os_prio=31
>>>>>>> tid=0x00007fce8a83b800 nid=0x4b03 runnable
>>>>>>> [0x0000700007e38000]
>>>>>>>   java.lang.Thread.State: RUNNABLE
>>>>>>>   at java.net.SocketInputStream.socketRead0(Native Method)
>>>>>>>   at
>>>>>>> java.net.SocketInputStream.socketRead(SocketInputStream.java:
>>>>>>> 116)
>>>>>>>   at
>>>>>>> java.net.SocketInputStream.read(SocketInputStream.java:171)
>>>>>>>   at
>>>>>>> java.net.SocketInputStream.read(SocketInputStream.java:141)
>>>>>>>   at
>>>>>>> sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
>>>>>>>   at
>>>>>>> sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
>>>>>>>   at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
>>>>>>>   - locked <0x000000076adce880> (a
>>>>>>> java.io.InputStreamReader)
>>>>>>>   at
>>>>>>> java.io.InputStreamReader.read(InputStreamReader.java:184)
>>>>>>>   at java.io.BufferedReader.fill(BufferedReader.java:161)
>>>>>>>   at
>>>>>>> java.io.BufferedReader.readLine(BufferedReader.java:324)
>>>>>>>   - locked <0x000000076adce880> (a
>>>>>>> java.io.InputStreamReader)
>>>>>>>   at
>>>>>>> java.io.BufferedReader.readLine(BufferedReader.java:389)
>>>>>>>   at
>>>>>>> com.intellij.rt.execution.application.AppMainV2$1.run(AppMain
>>>>>>> V2.j
>>>>>>> ava:
>>>>>>> 64)
>>>>>>> 
>>>>>>> "Signal Dispatcher" #4 daemon prio=9 os_prio=31
>>>>>>> tid=0x00007fce8881c000 nid=0x4903 runnable
>>>>>>> [0x0000000000000000]
>>>>>>>   java.lang.Thread.State: RUNNABLE
>>>>>>> 
>>>>>>> "Finalizer" #3 daemon prio=8 os_prio=31
>>>>>>> tid=0x00007fce89003800
>>>>>>> nid=0x3903 in Object.wait() [0x0000700007c32000]
>>>>>>>   java.lang.Thread.State: WAITING (on object monitor)
>>>>>>>   at java.lang.Object.wait(Native Method)
>>>>>>>   - waiting on <0x000000076ab08ec0> (a
>>>>>>> java.lang.ref.ReferenceQueue$Lock)
>>>>>>>   at
>>>>>>> java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
>>>>>>>   - locked <0x000000076ab08ec0> (a
>>>>>>> java.lang.ref.ReferenceQueue$Lock)
>>>>>>>   at
>>>>>>> java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
>>>>>>>   at
>>>>>>> java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:20
>>>>>>> 9)
>>>>>>> 
>>>>>>> "Reference Handler" #2 daemon prio=10 os_prio=31
>>>>>>> tid=0x00007fce8b004000 nid=0x3703 in Object.wait()
>>>>>>> [0x0000700007b2f000]
>>>>>>>   java.lang.Thread.State: WAITING (on object monitor)
>>>>>>>   at java.lang.Object.wait(Native Method)
>>>>>>>   - waiting on <0x000000076ab06b68> (a
>>>>>>> java.lang.ref.Reference$Lock)
>>>>>>>   at java.lang.Object.wait(Object.java:502)
>>>>>>>   at
>>>>>>> java.lang.ref.Reference.tryHandlePending(Reference.java:191)
>>>>>>>   - locked <0x000000076ab06b68> (a
>>>>>>> java.lang.ref.Reference$Lock)
>>>>>>>   at
>>>>>>> java.lang.ref.Reference$ReferenceHandler.run(Reference.java:1
>>>>>>> 53)
>>>>>>> 
>>>>>>> "main" #1 prio=5 os_prio=31 tid=0x00007fce8a008000 nid=0x1c03
>>>>>>> waiting
>>>>>>> on condition [0x0000700007110000]
>>>>>>>   java.lang.Thread.State: WAITING (parking)
>>>>>>>   at sun.misc.Unsafe.park(Native Method)
>>>>>>>   - parking to wait for  <0x000000076c1d0980> (a
>>>>>>> java.util.concurrent.locks.AbstractQueuedSynchronizer$Conditi
>>>>>>> onOb
>>>>>>> ject
>>>>>>> )
>>>>>>>   at
>>>>>>> java.util.concurrent.locks.LockSupport.park(LockSupport.java:
>>>>>>> 175)
>>>>>>>   at
>>>>>>> java.util.concurrent.locks.AbstractQueuedSynchronizer$Conditi
>>>>>>> onOb
>>>>>>> ject
>>>>>>> .await(AbstractQueuedSynchronizer.java:2039)
>>>>>>>   at
>>>>>>> org.apache.http.pool.AbstractConnPool.getPoolEntryBlocking(Ab
>>>>>>> stra
>>>>>>> ctCo
>>>>>>> nnPool.java:377)
>>>>>>>   at
>>>>>>> org.apache.http.pool.AbstractConnPool.access$200(AbstractConn
>>>>>>> Pool
>>>>>>> .jav
>>>>>>> a:67)
>>>>>>>   at
>>>>>>> org.apache.http.pool.AbstractConnPool$2.get(AbstractConnPool.
>>>>>>> java
>>>>>>> :243
>>>>>>> )
>>>>>>>   - locked <0x000000076d160008> (a
>>>>>>> org.apache.http.pool.AbstractConnPool$2)
>>>>>>>   at
>>>>>>> org.apache.http.pool.AbstractConnPool$2.get(AbstractConnPool.
>>>>>>> java
>>>>>>> :191
>>>>>>> )
>>>>>>>   at
>>>>>>> org.apache.http.impl.conn.PoolingHttpClientConnectionManager.
>>>>>>> leas
>>>>>>> eCon
>>>>>>> nection(PoolingHttpClientConnectionManager.java:282)
>>>>>>>   at
>>>>>>> org.apache.http.impl.conn.PoolingHttpClientConnectionManager$
>>>>>>> 1.ge
>>>>>>> t(Po
>>>>>>> olingHttpClientConnectionManager.java:269)
>>>>>>>   at
>>>>>>> org.apache.http.impl.execchain.MainClientExec.execute(MainCli
>>>>>>> entE
>>>>>>> xec.
>>>>>>> java:191)
>>>>>>>   at
>>>>>>> org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolE
>>>>>>> xec.
>>>>>>> java
>>>>>>> :185)
>>>>>>>   at
>>>>>>> org.apache.http.impl.execchain.RetryExec.execute(RetryExec.ja
>>>>>>> va:8
>>>>>>> 9)
>>>>>>>   at
>>>>>>> org.apache.http.impl.execchain.RedirectExec.execute(RedirectE
>>>>>>> xec.
>>>>>>> java
>>>>>>> :111)
>>>>>>>   at
>>>>>>> org.apache.http.impl.client.InternalHttpClient.doExecute(Inte
>>>>>>> rnal
>>>>>>> Http
>>>>>>> Client.java:185)
>>>>>>>   at
>>>>>>> org.apache.http.impl.client.CloseableHttpClient.execute(Close
>>>>>>> able
>>>>>>> Http
>>>>>>> Client.java:83)
>>>>>>>   at
>>>>>>> org.apache.http.impl.client.CloseableHttpClient.execute(Close
>>>>>>> able
>>>>>>> Http
>>>>>>> Client.java:108)
>>>>>>>   at
>>>>>>> org.apache.flink.streaming.connectors.fs.HttpClientWithSync.m
>>>>>>> ain(
>>>>>>> Http
>>>>>>> ClientWithSync.java:37)
>>>>>>> 
>>>>>>> "VM Thread" os_prio=31 tid=0x00007fce88819000 nid=0x3503
>>>>>>> runnable 
>>>>>>> 
>>>>>>> "GC task thread#0 (ParallelGC)" os_prio=31
>>>>>>> tid=0x00007fce8a014000
>>>>>>> nid=0x2503 runnable 
>>>>>>> 
>>>>>>> "GC task thread#1 (ParallelGC)" os_prio=31
>>>>>>> tid=0x00007fce8a014800
>>>>>>> nid=0x2703 runnable 
>>>>>>> 
>>>>>>> "GC task thread#2 (ParallelGC)" os_prio=31
>>>>>>> tid=0x00007fce89004800
>>>>>>> nid=0x2903 runnable 
>>>>>>> 
>>>>>>> "GC task thread#3 (ParallelGC)" os_prio=31
>>>>>>> tid=0x00007fce88800800
>>>>>>> nid=0x2b03 runnable 
>>>>>>> 
>>>>>>> "GC task thread#4 (ParallelGC)" os_prio=31
>>>>>>> tid=0x00007fce88808800
>>>>>>> nid=0x2d03 runnable 
>>>>>>> 
>>>>>>> "GC task thread#5 (ParallelGC)" os_prio=31
>>>>>>> tid=0x00007fce88809000
>>>>>>> nid=0x2f03 runnable 
>>>>>>> 
>>>>>>> "GC task thread#6 (ParallelGC)" os_prio=31
>>>>>>> tid=0x00007fce89005800
>>>>>>> nid=0x3103 runnable 
>>>>>>> 
>>>>>>> "GC task thread#7 (ParallelGC)" os_prio=31
>>>>>>> tid=0x00007fce89006000
>>>>>>> nid=0x3303 runnable 
>>>>>>> 
>>>>>>> "VM Periodic Task Thread" os_prio=31 tid=0x00007fce888c7000
>>>>>>> nid=0x5703 waiting on condition 
>>>>>>> 
>>>>>>> JNI global references: 364
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> -------------------------------------------------------------
>>>>>> ----
>>>>>> ----
>>>>>> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.
>>>>>> org
>>>>>> <mailto:httpclient-users-unsubscr...@hc.apache.org>
>>>>>> For additional commands, e-mail: httpclient-users-help@hc.apach
>>>>>> e.or
>>>>>> g <mailto:httpclient-users-h...@hc.apache.org>
>>>> 
>>>> -----------------------------------------------------------------
>>>> ----
>>>> To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org
>>>> <mailto:httpclient-users-unsubscr...@hc.apache.org 
>>>> <mailto:httpclient-users-unsubscr...@hc.apache.org> 
>>>> <mailto:httpclient-users-unsubscr...@hc.apache.org 
>>>> <mailto:httpclient-users-unsubscr...@hc.apache.org>>>
>>>> For additional commands, e-mail: httpclient-users-h...@hc.apache.or 
>>>> <mailto:httpclient-users-h...@hc.apache.or> 
>>>> <mailto:httpclient-users-h...@hc.apache.or 
>>>> <mailto:httpclient-users-h...@hc.apache.or>>
>>>> g <mailto:httpclient-users-h...@hc.apache.org 
>>>> <mailto:httpclient-users-h...@hc.apache.org> 
>>>> <mailto:httpclient-users-h...@hc.apache.org 
>>>> <mailto:httpclient-users-h...@hc.apache.org>>>
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org 
>> <mailto:httpclient-users-unsubscr...@hc.apache.org> 
>> <mailto:httpclient-users-unsubscr...@hc.apache.org 
>> <mailto:httpclient-users-unsubscr...@hc.apache.org>>
>> For additional commands, e-mail: httpclient-users-h...@hc.apache.org 
>> <mailto:httpclient-users-h...@hc.apache.org> 
>> <mailto:httpclient-users-h...@hc.apache.org 
>> <mailto:httpclient-users-h...@hc.apache.org>>

Reply via email to