我真的是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?
答案 0 :(得分: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);
答案 1 :(得分: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);
}