Ожидание возвращаемого значения метода

Я действительно ник в java, поэтому вот моя проблема. У меня есть возвращаемая строка:

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

Проблема в том, что код return string возвращает null, потому что метод getResponse() запрашивает пару секунд, чтобы получить ответ. Любой способ дождаться завершения getResponse() и только потом вернуть String?

Ответ 1

Вы можете попробовать использовать объекты 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);

Ответ 2

Вы должны использовать пул потоков или 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);
}