`

JAVA 异步HTTP请求 Httpasyncclient

 
阅读更多

java.util.concurrent中主要包括三类工具,Executor Freamework,并发集合(Concurrent Collection),以及同步器(Synchronizer)。

 

Future接口表示异步计算的结果。计算完成后只能使用 get 方法来获取结果,如有必要,计算完成前可以阻塞此方法。取消则由 cancel 方法来执行。还提供了其他方法,以确定任务是正常完成还是被取消了。一旦计算完成,就不能再取消计算。如果为了可取消性而使用 Future 但又不提供可用的结果,则可以声明 Future<?> 形式类型、并返回 null 作为底层任务的结果。

public class AsyncClientHttpExchange {
    public static void main(final String[] args) throws Exception {
        // 默认的配置
        CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();
        try {
             httpclient.start();
             HttpGet request = new HttpGet("http://www.apache.org/");
             Future<HttpResponse> future = httpclient.execute(request, null);
             // 获取结果             
             HttpResponse response = future.get();
             System.out.println("Response: " + response.getStatusLine());
             System.out.println("Shutting down");
        } finally {
             httpclient.close();
        }
        System.out.println("Done");
    }
}

 

同步器(Synchronizer)是一些使线程能够等待另一个线程的对象,允许它们协作。

最常用的同步器是CountDownLatch和Semaphore。较不常用的是CyclicBarrier和Exchanger。Semaphore类是一个计数信号量。计数信号量由一个指定数量的 "许可" 初始化。每调用一次 acquire(),一个许可会被调用线程取走。每调用一次 release(),一个许可会被返还给信号量。因此,在没有任何 release() 调用时,最多有 N 个线程能够通过 acquire() 方法,N 是该信号量初始化时的许可的指定数量。这些许可只是一个简单的计数器。

CountDownLatch是一个同步辅助类,以一个给定的数量初始化。countDown() 每被调用一次,这一数量就减一。通过调用 await() 方法之一,线程可以阻塞等待这一数量到达零。

下面是异步请求一组url的例子,利用callback借口完成独立的操作。

public class AsyncClientHttpExchangeFutureCallback {
    public static void main(final String[] args) throws Exception {
        RequestConfig requestConfig = RequestConfig.custom()
            .setSocketTimeout(3000).setConnectTimeout(3000).build();
        CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
            .setDefaultRequestConfig(requestConfig).build();
        
        try {
             httpclient.start();
             final HttpGet[] requests = new HttpGet[] {
                 new HttpGet("http://www.apache.org/"),
                 new HttpGet("https://www.verisign.com/"),
                 new HttpGet("http://www.google.com/"),
                 new HttpGet("http://www.baidu.com/") };
             final CountDownLatch latch = new CountDownLatch(requests.length);
             for (final HttpGet request : requests) {
                 httpclient.execute(request, new FutureCallback<HttpResponse>() {
                     // 无论完成还是失败都调用countDown()
                     @Override
                     public void completed(final HttpResponse response) {
                         latch.countDown();
                         try {
                             String content = EntityUtils.toString(response.getEntity, "UFT-8");
                             System.out.println("response content is " + content);
                         } catch (Exception e) {
                             e.printStackTrace();
                         }
                         System.out.println(request.getRequestLine() + "->"
                             + response.getStatusLine());
                     }
     
                     @Override
                     public void failed(final Exception ex) {
                         latch.countDown();
                         System.out.println(request.getRequestLine() + "->" + ex);
                     }
     
                      @Override
                      public void cancelled() {
                          latch.countDown();
                          System.out.println(request.getRequestLine()
                             + " cancelled");
                       }
               });
           }
           latch.await();
           System.out.println("Shutting down");
       } finally {
            httpclient.close();
       }
       System.out.println("Done");
    }
}

 

http://www.linuxidc.com/Linux/2014-09/106563.htm

 

分享到:
评论

相关推荐

    javaHttp异步请求

    Java中的HTTP异步请求是一种高效的网络通信方式,它允许程序在发送HTTP请求后不等待响应,而是立即继续执行其他任务,当服务器响应时,通过回调函数处理结果。这种方式避免了同步请求时线程阻塞的问题,提高了应用的...

    java实现HttpClient异步请求资源的方法

    本篇文章将详细介绍如何使用Java的HttpClient实现异步请求资源。 首先,让我们了解什么是异步请求。在同步请求中,调用一个API或发送一个HTTP请求后,程序会等待响应返回,然后继续执行后续代码。而异步请求则不同...

    HttpAsyncClient异步http工具包

    HttpAsyncClient是Apache HttpClient项目的一部分,它是一个强大的Java库,用于执行HTTP请求,特别是强调异步非阻塞I/O操作。这个工具包被设计用来处理大量并发请求,这对于现代Web应用和服务来说非常重要,因为它们...

    基于java的异步HTTP客户端开发包 HttpAsyncClient.zip

    2. **异步请求**:HttpAsyncClient提供了多种方法来发起异步HTTP请求,如execute(HttpUriRequest)方法,它可以处理GET、POST等各种HTTP方法。请求执行后,你可以提供一个FutureCallback或者注册一个 HttpContext ...

    java源码:异步HTTP客户端开发包 HttpAsyncClient.rar

    《Java异步HTTP客户端开发详解——HttpAsyncClient》 在Java世界中,高效地处理HTTP请求是许多开发者面临的重要任务,尤其是对于需要处理大量并发请求的场景。Apache HttpClient项目为开发者提供了一个强大的工具,...

    基于Java的异步HTTP客户端开发包 HttpAsyncClient.zip

    2. **异步处理**:库中的核心接口`org.apache.http.nio.client.HttpAsyncClient`定义了异步请求和响应处理方法,如`execute`和`start`。通过注册回调函数,开发者可以在请求完成或出现错误时得到通知,无需显式地...

    基于Java的实例源码-异步HTTP客户端开发包 HttpAsyncClient.zip

    - 发起异步请求,例如`execute(HttpUriRequest, FutureCallback)`。 - 关闭客户端时需调用`close()`方法释放资源。 6. **实例源码分析**:在"HttpAsyncClient.zip"中,包含的源码示例可能涵盖了以下主题: - ...

    异步HTTP客户端开发包 HttpAsyncClient

    HttpAsyncClient就是这样一个专门针对异步HTTP请求设计的库,它允许开发者在Java环境中以非阻塞的方式发送HTTP请求,从而提高应用的性能和响应速度。 首先,我们需要理解什么是异步编程。在传统的同步模式中,程序...

    java后端请求HTTP需要用到的jar包及其测试方法(get和post)

    测试内容应包括但不限于:正常请求、错误处理、超时设置、连接管理、异步请求等。 总结来说,利用Apache HttpClient进行Java后端的HTTP请求,需要依赖一系列Apache Commons库,这些库提供了从网络通信到数据处理的...

    httpasyncclient jar包

    总结起来,httpasyncclient是一个强大的Java HTTP异步客户端库,通过非阻塞I/O和事件驱动模型,提高了网络应用的并发性能和响应速度。httpasyncclient-4.0-beta4.jar作为该库的一个版本,提供了完整的API和实现,为...

    http异步所需jar

    &lt;dependency&gt; &lt;groupId&gt;org.apache.httpcomponents&lt;/groupId&gt; &lt;artifactId&gt;httpclient&lt;/artifactId&gt; ... &lt;artifactId&gt;httpasyncclient&lt;/artifactId&gt; &lt;version&gt;4.1.2&lt;/version&gt; &lt;/dependency&gt;

    HttpAsyncClient

    HttpAsyncClient是Apache HttpClient项目的一个子模块,专注于异步非阻塞的HTTP客户端操作。在Java世界中,它为开发者提供了强大的、高性能的HTTP/1.1和HTTP/2通信能力。HttpAsyncClient 4.1.1版本是对这个库的一次...

    使用HttpClient管理HTTP请求

    此外,HttpClient还支持异步操作,通过`HttpAsyncClient`可以实现非阻塞的网络I/O,这对于高并发的场景非常有用。 在博客中的"HttpHandler.java"文件很可能包含了实现这些功能的具体代码示例。它可能包括了请求的...

    httpasyncclient-4.0-beta4.jar、httpcore-4.3.2.jar和httpmime-4.3.5.jar

    在给定的文件中,我们关注的是三个关键的JAR包:`httpasyncclient-4.0-beta4.jar`、`httpcore-4.3.2.jar`和`httpmime-4.3.5.jar`,它们共同构建了一个强大的异步HTTP处理框架。 1. **HttpAsyncClient 4.0-beta4**:...

    HttpToolbox:HTTP 工具箱

    HTTP 工具箱v0.1.0 2014-12-19用途列举了HttpClient的常用功能, 让我们可以快速上手完成发送HTTP请求的任务并发请求异步请求(HttpAsyncClient)解析JSON支持gzip常用的log4j配置常用的应用配置机制, 例如需要打包一个...

    httpasyncclient 源码

    3. 使用`execute()`方法发起异步请求,传入`HttpRequest`、`HttpAsyncResponseConsumer`和`FutureCallback`。 4. `execute()`方法返回一个`Future`对象,可以通过它来检查请求状态或获取结果。 5. 在回调函数中处理...

    appche 的http请求jar包分享给大家 拿走不谢

    在提供的压缩包中,可能还包含其他依赖,如`httpmime.jar`用于处理MIME类型的请求体,或者`httpasyncclient.jar`用于异步HTTP操作。 以下是一些使用Apache HttpClient的基本步骤: 1. **创建HttpClient实例**:...

    Apache httpclient源码4.5.12

    HttpClient的异步特性是通过`HttpAsyncClient`实现的,它允许在不阻塞主线程的情况下发送HTTP请求。`Future&lt;HttpResponse&gt;`返回的结果可以异步处理,增强了程序的并发性能。 在学习HttpClient源码时,你可以深入...

    httpClient需要的JAR包

    9. **异步处理**:除了同步方式,HttpClient还提供了异步API,如`HttpAsyncClient`,可以在单独的线程中处理请求和响应,这对于非阻塞I/O和高并发场景特别有用。 10. **版本兼容性**:HttpClient有多个版本,不同...

Global site tag (gtag.js) - Google Analytics