10

私は本当にJavaの初心者なので、ここに私の問題があります。返された文字列があります:

public static String pushToServer(String data){
    //some code here
            Thread.sleep(10000);
            getResponse(); //accesing a public void method
    return string;
    }

問題は、return stringgetResponse()メソッドが応答を取得するために数秒を要求するため、そのコードがnullを返すことです。getResponse()が終了するのを待ってから、Stringを返す方法はありますか?

4

2 に答える 2

16

FutureオブジェクトとCallableタスクの使用を試みることができます。これらは、別のスレッドでタスクを実行し、後で返されたデータを使用する場合に非常に役立ちます。操作結果を取得する必要があり、タスクが完了していない場合、操作は単にブロックされ、すべてが続行できるようになるまで待機します。ここでそれらの使用方法を見つけることができます:http ://www.javacodegeeks.com/2011/09/java-concurrency-tutorial-callable.html

簡単な例:

public class YourTask implements Callable {
    public String call() throws Exception {
        /* Do what you want to do */
    }
}

コードのどこか:

Future future = yourThreadPool.submit(new YourTask());

結果を使用します。

String returnString = future.get(15, TimeUnit.SECONDS);
于 2012-12-28T12:09:15.130 に答える
0

次のような別のスレッドでスレッドプールまたはFutureTaskを使用する必要があります。

public static String pushToServer(String data){
    Future<V> f = getResponse(data)
    //waiting 10 second for the result at most
    return f.get(10,TimeUnit.SECONDS);
}


private Future<V> getResponse(data){   
    return athreadPool.submit(a task);
}
于 2012-12-28T12:19:52.033 に答える