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

San*_*osh 1 java multithreading android thread-safety

这是我的问题......

 public static String response = "";   
Run Code Online (Sandbox Code Playgroud)

"

 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;

  }
Run Code Online (Sandbox Code Playgroud)

当我调用这个方法时,我得到空字符串作为响应.

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

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

Bor*_*jev 5

你可以做:

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

这样你就会等到线程结束然后再继续.

但是,请记住,在Android中等待线程完成是危险的,尤其是在UI线程(即主线程)中.但是,我假设这个线程不在UI线程中,因为否则AsyncTask会有更好的解决方案(更本地化).