10

我真的是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() 完成然后才返回字符串?

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 回答