我偶然发现了一个对我来说不明确的问题。
一个。使用Java 1.4,将以下函数包装在一个线程中,以便可以异步调用它,并提供一种方法,以便稍后检索返回值:
B中。如何在Java 5中完成相同的工作
int someMethod(int i) { return i++; }
我认为其中一个解决方案是:使用两种公共方法void synchronized calculate(int i)
和int getValue()
编写一个类。 calculate
启动线程并设置私有变量。
在java 1.5中,我可以使用AtomincInteger。这是答案吗?
答案 0 :(得分:1)
在Java 1.5中,我很确定你会使用Future
来返回结果。我不确定1.4等值,但看起来this question涵盖了相同的基础。
答案 1 :(得分:0)
也许您可以在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;
}
请确保私有值必须声明为volatile
。
有关double check locking的更多信息。
答案 2 :(得分:0)
让calculate()
方法将结果放入BlockingQueue queue
,getValue()
方法调用queue.take()
,等待结果尚未计算的情况。
如果可以多次调用getValue()
方法,请注意需要额外的编程工作。