1

私にとって明確ではない質問に出くわしました。

A. Java 1.4 を使用して、次の関数をスレッドでラップし、非同期的に呼び出すことができるようにし、後で戻り値を取得する方法を提供します。

B. Java 5 で同じことを行う方法

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

私が考える解決策の 1 つは、2 つのパブリック メソッドvoid synchronized calculate(int i)とを持つクラスを作成することint getValue()です。はcalculateスレッドを開始し、プライベート変数を設定します。

Java 1.5 では AtomincInteger を使用できます。それは答えですか?

4

3 に答える 3

1

FutureJava 1.5 では、結果を返すために a を使用するはずです。1.4に相当するものについてはわかりませんが、この質問は同じ根拠をカバーしているようです。

于 2013-01-11T20:21:00.820 に答える
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 に答える
0

メソッドcalculate()が結果を に入れ、BlockingQueue queueメソッドgetValue()を呼び出すqueue.take()ようにして、結果がまだ計算されていない場合に備えて待機します。

getValue()メソッドを複数回呼び出すことができる場合は、追加のプログラミング作業が必要になることに注意してください。

于 2013-01-14T13:16:53.280 に答える