有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何停止当前线程直到其他线程完成其执行?

这是我的问题

 public static String response = "";   

"

 public static String sendDataToServer(String data)
  {
    new Thread()  
    {
     public void run()
     {
     //sending data to server
     response = httpClient.execute(httppost, new BasicResponseHandler()).trim();
    }

    } .start();   

   return response;

  }

当我调用这个方法时,我得到的响应是空字符串

String res = sendDataToServer("my_data");  //res is always empty string
 //...XXXXXXX code after calling the method 

并且总是在完成sendDataToServer()方法的执行之前执行XXXXX代码。为什么res总是空的?如何获得正确的响应字符串?在执行sendDataServer()方法之前,如何停止正在执行的XXXX代码? 谢谢


共 (3) 个答案

  1. # 1 楼答案

    可以使用CountDownLatch来同步线程执行。作为文档中的替代,倒计时闩锁允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。如果启动sendDataToServer的线程是UI或主线程,这当然会导致应用程序的响应出现问题。提供更多细节

  2. # 2 楼答案

    您可以使用join()来等待线程,但由于您的线程是空的,以下操作也会执行相同的操作

    public static String sendDataToServer(String data) {
         //sending data to server
         return httpClient.execute(httppost, new BasicResponseHandler()).trim();
    }
    
  3. # 3 楼答案

    你可以做:

    Thread t = new Thread() {
        public void run() {
            //sending data to server
            response =
                  httpClient.execute(httppost, new BasicResponseHandler()).trim();
        }
     };
     t.start();
     t.join();
    

    这样,您将等待线程完成,然后继续执行jsut

    然而,请记住,在Android中等待线程完成是危险的,尤其是在UI线程(即主线程)中。然而,我假设这个线程不在UI线程中,因为否则AsyncTask会是更好的解决方案(而且更原生)