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

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

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

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

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

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

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

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

第一:在最第一笔交易时,首先将第一笔交易存放到,本地线程变量中。如实现方式
[code="java"]
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);
}

[/code]

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

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

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

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

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