-1

如何延迟从 Java 中的方法返回变量,或者如果不希望这样做,我应该怎么做?

考虑一下:

public class Transaction {
    public int addInsert() {
        ...
        return insertId;
    }

    public boolean addUpdate() {
        ...
        return updateSuccesful;
    }

    public void commit() {
        /* Calls everything that is inserted via addInsert or addUpdate. */
    }
}

现在假设您将代码用作:

Transaction transaction = new Transaction();
int insertedId = transaction.addInsert();
boolean updateSuccesful = transaction.addUpdate();
//insertId, updateSuccesful cannot be known yet

transaction.commit();
//now insertId, updateSuccesful should be filled in

所以返回可能只有transaction.commit()在被调用时才会发生。

有什么想法吗?

4

2 回答 2

2

您可以通过多线程实现此功能,并使运行这两个方法的线程.wait()直到commit()方法调用.notify()让它们知道它们可以完成。

然而,一个更好的构建方法是重新组织你的方法,也许通过让 commit 返回 theinsertedID并在return -1它不成功时进行。这样,您可以通过查看它是否为 -1 来检查布尔值,并且您可以通过读取提交的返回来读取 ID。

于 2013-07-02T17:11:31.227 回答
1

您的示例看起来像工作单元模式:http ://martinfowler.com/eaaCatalog/unitOfWork.html 这也显示了您问题的答案。您实际上不能调用方法 a,并且它的返回值会延迟到您调用方法 b 而不进入线程,这仍然是一个过于复杂且非常脆弱的问题解决方案。而是调用方法 a、方法 b 等。但是,在提交发生之前不要实际执行工作。然后提交返回,或者您可以调用 getMethodAStatus() 等。

于 2013-07-02T17:11:54.537 回答