1

我偶然发现了一个我不清楚的问题。

A. 使用 Java 1.4,将以下函数包装在一个线程中,以便可以异步调用它,并提供一种稍后检索返回值的方法:

B. 在 Java 5 中如何做同样的事情

int someMethod(int i) { return i++; }

我认为是解决方案之一:编写一个具有两个公共方法的类void synchronized calculate(int i)int getValue(). calculate启动线程并设置一个私有变量。

在 java 1.5 中,我可以使用 AtomincInteger。这是一个答案吗?

4

3 回答 3

1

在 Java 1.5 中,我很确定您会使用 aFuture返回结果。我不确定 1.4 的等价物,但看起来这个问题涵盖了相同的领域。

于 2013-01-11T20:21:00.820 回答
0

calculate()方法将结果放入 a 中BlockingQueue queue,然后getValue()方法调用queue.take(),从而等待结果尚未计算的情况。

getValue()如果可以多次调用该方法,请注意额外的编程工作。

于 2013-01-14T13:16:53.280 回答
0

Mybe您可以使用双重检查锁定1.5 or later

private volatile int privateValue = 0;

public void calculate(int i) {
    int result = getValue(i);
    if (privateValue != result) {
        synchronized (this) {
            if (privateValue != result) {
                privateValue = result;
            }
        }
    }

}

public int getValue(){
    return privateValue;
}

确保您的 privateValue 必须声明为volatile.

有关双重检查锁定的更多信息。

“双重检查锁定被破坏”声明

于 2013-01-13T07:50:24.040 回答