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

Я действительно нооб в 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?

10
nl ja de
ну, потому что u havent инициализировал переменную 'string', дайте ей некоторое значение, а затем верните
добавлено автор Hussain Akhtar Wahid 'Ghou, источник
Я бы изменил getResponse, чтобы он не возвращался, пока не получил ответ.
добавлено автор Peter Lawrey, источник
что делает метод getResponse() ? Отправьте код для этого.
добавлено автор Nandkumar Tekale, источник
Метод getReponse() просто выполняет запрос GET, если сервер отвечает не готов, он ждет 10 секунд и выполняет другой запрос GET.
добавлено автор artouiros, источник

2 ответы

You can try to use Future objects and Callable tasks. They are quite useful when you want to run some task in another thread and use returned data later. When you want to retrieve the operation results and the task has not finished your operation will simply block and wait until everything is ready to proceed. Here you can find how to use them: 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);
14
добавлено
Пожалуйста :)
добавлено автор Adam Sznajder, источник
спасибо, именно то, что мне нужно.
добавлено автор artouiros, источник

Вы должны использовать пул потоков или FutureTask в другом потоке, например:

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


private Future getResponse(data){   
    return athreadPool.submit(a task);
}
0
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async