`

java异步任务处理

 
阅读更多
from:  https://www.cnblogs.com/chenmo-xpw/p/5652029.html

  

1、场景



  最近做项目的时候遇到了一个小问题:从前台提交到服务端A,A调用服务端B处理超时,原因是前端一次请求往db插1万数据,插完之后会去清理缓存、发送消息。

服务端的有三个操作 a、插DB b、清理cache  c、发送消息。1万条数据,说多不多,说少不少.况且不是单单insert。出现超时现象,不足为奇了吧~~



2、分析



  如何避免超时呢?一次请求处理辣么多数据,可分多次请求处理,每次请求处理100条数据,可以有效解决超时问题. 为了不影响用户的体验,请求改为ajax 异步请求。

除此之外,仔细分析下场景. a 操作是本次处理的核心. 而b、c操作可以异步处理。换句话说,a操作处理完可以马上返回给结果, 不必等b、c处理完再返回。b、c操作可以放在一个异步任务去处理。



3、实战



(1)、ExecutorService : 任务提交



(2)、demo

异步任务类

复制代码
public class ExecutorDemo {

    private ExecutorService executor = Executors.newFixedThreadPool(1);
   
    public void asynTask() throws InterruptedException {
       
       
        executor.submit(new Runnable() {
           
            @Override
            public void run() {
               
                try {
                    Thread.sleep(10000);//方便观察结果
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
               
               
                int sum = 0;
                for(int i = 0; i < 1000; i++) {
                   
                    sum += i;
                }
               
                System.out.println(sum);
            }
        });
       
    }
}
复制代码
客户端模拟

复制代码
public class Client {

    public static void main(String[] args) throws InterruptedException {
       
        boolean r = task2();
       
        if(r) {
            task3();
        }
       
        System.out.println("------------main end-----------");
    }
   
    static boolean task2() throws InterruptedException {
       
        ExecutorDemo e = new ExecutorDemo();
       
        e.asynTask();
       
        System.out.println("------------task2 end-----------");
       
        return true;
    }
   
   
    static void task3() throws InterruptedException {
        int j = 0;
        while(true) {
            if(j++ > 10000) {
                break;
            }
        }
       
        System.out.println("------------task3 end-----------");
    }
}
复制代码


结果是酱紫的

------------task2 end-----------
------------task3 end-----------
------------main end-----------
499500


我们来分析下结果, task2是个异步任务,执行到task2,主线程不会在task2 阻塞,不用等待task2 处理完,可以往下执行task3.
分享到:
评论

相关推荐

    Java_异步消息处理

    ### Java异步消息处理知识点详解 #### 一、适应不同类型的请求 在Java异步消息处理中,系统设计需要能够适应不同类型的请求。这通常包括两种类型:一种是有返回值的请求,另一种是没有返回值的请求。 - **有...

    Java异步编程框架之Promise介绍

    Java异步编程框架Promise是用于处理异步操作的一个重要工具,尤其在Java中,Promise的概念被广泛应用于多种场景下进行高效的数据处理和结果获取。Promise框架主要作用在于简化异步编程模型,使其更加易于理解和使用...

    Java异步调用转同步方法实例详解

    Java异步调用转同步方法实例详解 Java异步调用转同步方法实例详解是指在Java中将异步调用转换为同步调用的技术,主要用于解决异步调用过程中的阻塞问题。异步调用是一种非阻塞的调用方式,调用方在调用过程中,不...

    javaHttp异步请求

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

    Spring 异步多线程动态任务处理的使用心得

    在现代应用中,高效地处理并发任务是至关重要的,Spring为此提供了异步任务处理的功能,可以显著提升系统的响应速度和性能。本文将深入探讨在Spring中如何利用多线程和动态任务来实现异步处理,并分享一些实践心得。...

    java异步通信示例

    Java异步通信是一种提高应用程序效率和响应速度的技术,它允许程序在等待IO操作完成时执行其他任务,而不是阻塞等待。在这个示例中,我们主要关注的是Java NIO(非阻塞I/O)和异步Socket。NIO是Java SE 1.4引入的一...

    Java异步技术原理和实践.rar_Java异步开发

    Java并发包中的`ExecutorService`接口和`Future`接口是实现异步任务的重要工具。`ExecutorService`管理线程池,负责调度和执行任务;`Future`接口表示异步计算的结果,可以用来检查任务是否完成,获取结果或者取消...

    Java异步技术原理和实践

    ### Java异步技术原理与实践 #### 一、引言 在现代软件开发尤其是微服务架构下,系统之间复杂的依赖关系和技术挑战日益增加。本文旨在深入探讨Java中的异步技术,包括其背后的原理以及如何在实际场景中运用这些...

    Java多线程实现异步调用实例

    Java 8引入的CompletableFuture提供了一种更高级的异步编程模型,支持链式调用和组合多个异步任务。 总之,Java多线程和异步调用是构建高效、响应迅速的应用程序的关键技术。通过合理利用这些工具和机制,开发者...

    Java实现异步调用

    它可以构建复杂的异步任务链,支持链式调用,如`thenApply()`, `thenAccept()`, `thenCompose()`等,可以轻松实现同步和异步操作的组合。 7. **异步IO(NIO)** Java的非阻塞I/O模型,如`java.nio`包,允许在等待I...

    Java程序框架--多线程异步处理多任务

    本程序提供了一个多任务多线程异步处理框架。该框架使用简单,用户只需要继承抽象类Task,构建自己的任务类,再构造一个任务源,就可以轻松使用这个框架。 程序包里提供了一个例子Mytask 和MyTaskGenerator, 用户只...

    java android业务异步编程小技巧

    本文将深入探讨Java和Android平台上的异步编程小技巧,并以"android业务异步编程小技巧.zip"和"java业务异步编程小技巧.zip"中的示例作为参考,讲解如何有效地进行异步任务处理。 首先,我们要理解Android应用中的...

    Ansync Test 异步任务带有 详细注释

    在IT行业中,异步任务处理是一项关键的技术,它在提高应用程序性能、优化资源利用和提升用户体验方面发挥着重要作用。在“Ansync Test 异步任务带有详细注释”这个项目中,我们可以深入学习如何实现和管理异步操作,...

    Java Http异步加载图片

    在Java编程中,异步加载图片是一项常见的任务,特别是在开发Android或者Web应用时,为了提高用户体验,我们需要在后台线程中加载图片,而不是阻塞主线程。本篇将深入讲解如何利用Java原生类实现Http异步加载图片的...

    java多线程异步性

    在Java中,通常通过Future和Callable接口实现异步计算,或者使用ExecutorService和CompletionService来管理和控制异步任务。 三、ExecutorService与ThreadPoolExecutor ExecutorService是Java并发框架中的核心接口...

    使用Java异步编程实现一个简单的网络请求.txt

    2. **异步编程模型**:通过Future和Callable可以实现异步任务的提交和结果获取,进一步提高程序的整体性能。 3. **网络请求处理**:利用HTTPURLConnection可以轻松地发起GET和POST请求,并处理响应数据。 综上所述...

    智能点评系统&多阶段异步任务处理框架

    智能点评系统和多阶段异步任务处理框架是现代IT领域中的关键组成部分,尤其在后端开发中扮演着重要角色。这两个概念涉及的技术广泛且深入,下面将分别进行详细阐述。 智能点评系统通常指的是利用人工智能技术收集、...

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

    而异步请求则不同,它允许程序在等待响应的同时继续执行其他任务,提高程序效率。HttpClient库通过提供非阻塞I/O(NIO)支持实现了异步请求。 以下是一个使用HttpClient进行异步请求的Java示例: ```java import ...

    Java-多线程异步请求统一响应结果.docx

    `Future`和`Callable`是Java中实现异步任务的基础组件之一。`Callable`是一个可以返回结果的接口,而`Future`则是用于获取这些结果的接口。 #### 示例代码解析 ```java //示例一 int threadNum = 3; List...

    异步任务的Demo

    `Params`代表异步任务执行时需要输入的参数类型,`Progress`表示后台任务执行过程中的进度类型,而`Result`则是任务执行完成后返回的结果类型。 `AsyncTask`包含四个关键方法: 1. `onPreExecute()`:在执行后台...

Global site tag (gtag.js) - Google Analytics