2012-12-28 36 views
10

Tôi thực sự là một noob trong java, vì vậy đây là vấn đề của tôi. Tôi có một String trả về:Đang đợi giá trị trả lại của phương thức

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

Vấn đề là, rằng return string mã trở lại null, phương pháp vì getResponse() yêu cầu một vài giây để có được câu trả lời. Bất kỳ cách nào để chờ getResponse() kết thúc và chỉ sau đó trả về String?

+1

phương thức 'getResponse()' làm gì? Đăng mã cho nó. –

+2

Tôi sẽ thay đổi getResponse để nó không trở lại cho đến khi nó nhận được phản hồi. –

+0

phương thức getReponse() chỉ thực hiện yêu cầu GET, nếu câu trả lời của máy chủ chưa sẵn sàng, nó đợi 10 giây và thực hiện một yêu cầu GET khác. – artouiros

Trả lời

14

Bạn có thể thử sử dụng các đối tượng FutureCallable công việc. Chúng khá hữu ích khi bạn muốn chạy một số nhiệm vụ trong một luồng khác và sử dụng dữ liệu trả về sau. Khi bạn muốn lấy lại kết quả hoạt động và nhiệm vụ chưa hoàn thành hoạt động của bạn sẽ chỉ đơn giản là chặn và chờ cho đến khi mọi thứ đã sẵn sàng để tiếp tục. Ở đây bạn có thể tìm cách sử dụng chúng: http://www.javacodegeeks.com/2011/09/java-concurrency-tutorial-callable.html

ví dụ đơn giản:

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

Một nơi nào đó trong mã:

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

Sử dụng kết quả:

String returnString = future.get(15, TimeUnit.SECONDS); 
+0

cảm ơn, chính xác những gì tôi cần. – artouiros

+0

Bạn được chào đón :) –

0

Bạn nên sử dụng chủ đề pool hoặc FutureTask trong một chủ đề khác như sau:

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); 
} 
Các vấn đề liên quan