2013-01-11 45 views
1

我偶然发现了一个对我来说不清楚的问题。带线程的异步函数

A.使用Java 1.4,包裹下面的函数在一个线程,以便它可以异步调用,并提供一种方式,在以后的时间被检索的返回值:

B.会如何写有两个公共方法void synchronized calculate(int i)int getValue()类:同样可以在Java 5中

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

我认为什么是解决方案之一来完成。 calculate启动线程并设置一个私有变量。

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

回答

1

在Java 1.5中,我敢肯定你会使用Future来返回结果。我不确定1.4的等价物,但它看起来像this question涵盖了同样的理由。

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

有关更多信息double check locking

The "Double-Checked Locking is Broken" Declaration

0

calculate()方法将结果放在BlockingQueue queuegetValue()方法调用queue.take(),从而等待结果尚未计算。

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