0 0

java异步调用但是需要实现同步的效果45

现在比如说我有10笔交易,我在执行第二笔交易的时候需要根据第一笔交易的结果来判断是否需要做该笔交易。注:如果是同步调用,应该很简单,但是现在因为业务需要不能改成同步调用。求大神支招。
2014年7月25日 19:24

6个答案 按时间排序 按投票排序

0 0

采纳的答案

任务队列啊。这不就是一个典型的状态机场景吗。每一步执行完成后,在根据执行结果选择下一步进行执行。
需要注意的是防止重复执行和保证最终一致的机制。
防止重复执行:每一笔交易给它一个唯一编码,执行成功后再次调用也不予第二次执行。
保证最终一致:异步执行过程中,如果返回失败则继续重试,设定最大重试次数,超过后转入异常队列,等待人工干预处理,不致于因为异常任务浪费大量处理时间。

2014年7月26日 15:47
0 0

话说,java.util.concurrent.Future 这个接口能用不?

2014年7月28日 08:42
0 0

你的每比交易都是开一个新的线程去做的吗?你可以用thread.join()在当前业务中将两个线程的逻辑人为的同步化。

2014年7月27日 11:01
0 0

楼主兄弟:在下有一个小技巧

第一:在最第一笔交易时,首先将第一笔交易存放到,本地线程变量中。如实现方式

   public class ThreadLocalManager {

    private static ThreadLocal<HashMap<?, ?>> pool = new ThreadLocal<HashMap<?, ?>>();

    public static Object get(String key) {

        Map<?, ?> map = (Map<?, ?>) pool.get();
        if (map == null) {
            return null;
        }
        return map.get(key);
    }

    public static void add(String key, Object value) {

        if (pool.get() == null) {
            pool.set(new HashMap());
        }
        Map map = (Map) pool.get();
        map.put(key, value);
    }

    public static Map getMap() {

        return (Map) pool.get();
    }

    public static void clear() {
        
        pool.set(null);
    }


在将你第一笔交易存放。如
ThreadLocalManager.add(key,value); //这里存放的键值对的数据,方便在第二笔中获取



第二:在执行第二笔交易的时候,去第一笔交易中,获取数据。如
   ThreadLocalManager.get(key); //这里通过key获取当前上个线程变量存放的数据。


接下来,做逻辑判断,就是你的事了。祝你成功。

2014年7月27日 10:02
0 0

可以根据上一个的返回结果或者利用回调函数实现。

2014年7月26日 09:37
0 0

一.如果你不是在一个代码实现,那就做一个标志位(回调),等到异步返回的时候,修改标志,通知第二笔交易可以进行了。

二.调用的结果虽是异步的,在代码里处理像是同步处理的。那你就必须实现主动等待了。while循环,时间累加试探性的去侦探返回标志。一旦返回了就跳出循环,处理第二笔交易。

大概是这样的思路,纯手打,求分。可私信交流。

2014年7月25日 19:34

相关推荐

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

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

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

    在本实例中,我们将深入探讨如何使用Java实现多线程以实现异步调用,并理解其背后的机制。 首先,多线程允许一个程序同时执行多个任务。在Java中,我们可以通过继承`Thread`类或实现`Runnable`接口来创建线程。在这...

    Java实现异步调用

    本篇将深入探讨如何在Java中实现异步调用,以及相关的核心概念和技术。 1. **线程与并发** 异步调用的基础是线程并发执行。Java提供了多线程支持,通过`Thread`类或者`Runnable`接口可以创建并启动新线程。当一个...

    java代码实现异步调用代码

    本文将深入探讨如何使用Java来实现异步调用,以及它在后端开发中的应用。 1. **Java中的异步调用基础** - **线程与并发**:Java中的异步调用通常基于多线程或并发执行。Java内置了对多线程的支持,通过`Thread`类...

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

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

    异步调用

    首先,我们需要理解什么是异步调用。在同步模式下,程序执行流程是线性的,一个任务必须等待前一个任务完成后才能继续执行,这可能导致应用程序在处理耗时操作(如网络请求或大数据计算)时阻塞。而异步调用则允许...

    javaHttp异步请求

    5. **NIO(非阻塞I/O)**: Java的`HttpAsyncClient`依赖于Java NIO(非阻塞I/O)来实现异步操作。NIO允许单个线程处理多个连接,显著提高了系统资源的利用率。 6. **线程池**: `HttpAsyncClient`通常会使用线程池来...

    如何用Java回调和线程实现异步调用.pdf

    "如何用Java回调和线程实现异步调用" 在软件开发中,异步调用是一种非阻塞式调用方式,用于在处理比较耗时的任务时保证程序的连续性和实时性。实现异步调用的关键在于解决三个技术难题:程序阻塞问题、异步消息的...

    利用RMI异步调用

    - 在RMI中,可以使用Java的ExecutorService或CompletableFuture等并发工具来实现异步调用。 3. **RMI异步调用步骤**: - 定义远程接口和实现类,确保方法标记为`remote`。 - 实现服务器端逻辑,包括创建远程对象...

    ice同步调用和异步调用实例代码

    Ice 是一种针对客户端和服务器进行通信的面向对象的中间件平台。Ice 为构建面向对象的客户-服务器应用提供了工具、API 和库支持。客户和服务器通信双方可以用不同的编程...本代码为ice同步调用和异步调用实例代码。

    异步调用流程图

    在实际项目中,可以利用各种编程语言(如JavaScript的Promise、async/await,Java的CompletableFuture,或者.NET的async/await)来实现异步调用。 异步调用对于优化性能和提升用户体验至关重要。例如,在网页加载中...

    JAVA邮件发送工具类(支持同步和异步发送邮件以及附件信息)

    JAVA邮件发送工具类(支持同步和异步发送邮件以及附件信息),支持多个抄送邮件发送。

    Java异步编程框架之Promise介绍

    Java异步编程框架Promise是用于处理异步操作的一个重要工具,尤其在Java中,Promise的概念被广泛应用...同时,理解Promise的用法,异步API的几种风格,以及并行和串行调用的场景,对于编写高效的Java异步程序至关重要。

    java同步异步知识

    ### Java中的同步与异步详解 #### 一、同步与异步的概念理解 在软件开发领域,特别是针对并发处理和网络编程时,我们经常会遇到“同步”与“异步”这两个概念。简单来说: - **同步(Synchronous)**:指的是程序...

    异步Web方法调用例子-Java源码

    - **AXIS2的异步调用机制**:AXIS2使用MessageReceiver接口处理消息,对于异步调用,可以实现AsyncMessageReceiver接口。当服务端接收到请求后,不会立即返回,而是将工作交给后台线程处理,并在完成后通过回调机制...

    Java接口异步调用

    8. Java异步调用:Java异步调用是指在Java编程中,使用异步调用方式来调用接口的方法。 9. 同步调用:同步调用是指在调用方需要等待被调用方完成操作的调用方式。 10. 取货凭证:取货凭证是指调用方在调用时获得的...

    java多个数据库实现数据同步

    综上所述,Java实现多数据库数据同步是一个涉及多种技术和策略的复杂问题,需要根据具体业务需求和系统架构来选择合适的方法。在实践中,应注重设计的灵活性、可扩展性和容错性,以保证系统的稳定运行。

    java实现两个mysql同步主库的数据

    下面我们将深入探讨如何使用Java实现两个MySQL数据库之间的数据同步,以及涉及的相关知识点。 首先,我们需要理解MySQL的复制原理。MySQL的主从复制是基于日志的,主库上的所有更改都会被记录到二进制日志(binlog...

    JAVA IO同步,异步

    JAVA IO同步、异步详解 IO 操作是计算机系统中最基本的操作之一,它可以分为同步(Synchronous)和异步(Asynchronous)两种模式。同步IO 是指应用程序在执行IO 操作时,需要等待IO 操作完成后才能继续执行其他操作...

    java异步socket调用.pdf

    Java异步Socket调用的知识点涵盖了Java网络编程中的关键概念和实践技巧,特别是在处理异步通信时使用的技术和方法。在讨论这个话题时,我们通常会涉及到以下几个重要方面: 1. 同步与异步通信: 同步通信指的是...

Global site tag (gtag.js) - Google Analytics