2012-11-27 154 views
0

我有这样的代码:等待,直到线程完成摆好

public class JsoupParser {  
    ArrayList<CompanyInfo> arr = new ArrayList<CompanyInfo>(); 

    public JsoupParser() {} 

    public ArrayList<CompanyInfo> parse(final String link) throws IOException { 
     Runnable runnable = new Runnable() { 
      public void run() { 
       // Here I do some operations and then assign some value 
       // to my `arr` ArrayList 
      } 
     }; 
     new Thread(runnable).start(); 

     return arr; // error here, as expected  
    } 
} 

系统立即返回arr,它在这一点上是null

只有在Thread完成后,我如何才能返回arr?我如何知道,Thread已完成?

回答

1

如何在线程完成后才能返回arr?我怎么可以通知 ,那Thread已经完成了?

Thread parseThread = new Thread(runnable).start(); 

parseThread.join(); 

return arr; 

有字面上回答你的问题,但zmbq的回答是你追求的更加贴合。

1

使用另一个线程的关键是让它在主线程执行其他操作时运行。如果您希望parse方法在完成时返回数组,它不应该启动另一个线程。

但是,因为我想你想要在后台进行计算,你需要做的其他事情。你为什么不看看AsyncTask?这可能是你需要的。