2013-10-03 125 views
0

我在类A中创建了一个方法,它创建一个线程并调用类B中的run方法。我在类B中的run方法中更新了类B中的列表,并且我需要在类A中访问该类中的方法方法返回。我已经给出了下面的示例代码。运行方法后执行代码?

class A { 
    public static void main(String[] args) { 

     List l = null; 

     B obj = new B(); 
     Thread T = new Thread(obj); 
     T.start(); 

     l = obj.getList(); 
     // do something with l  
    } 
} 

class B implements Runnable { 

    List l; 

    void run() { 
     l = doSomething();  
    } 

    public List getList() { 
     return List l; 
    } 
} 

现在,当我得到的列表值l = obj.getList();这是在A级A类线l = obj.getList();以前被通过的run方法更新立即被调用我得到空。如何让主线程在线程T返回后等待并显示正确的值。请建议?

+0

对于这样简单的代码来说,这是一个伪代码。 –

+4

看看''Future ''接口。 – qqilihq

+0

https://code.google.com/p/guava-libraries/wiki/ListenableFutureExplained;) – 2013-10-03 19:51:01

回答

7

虽然其他建议也可能有用。最简单的解决方案是等待线程结束。

T.start(); 
T.join(); 

l = obj.getList(); 
+0

+1如果主线程需要_wait_值,那么'join()'是最好的解决方案,不仅仅是更简单。 – Gray

1

在这种特殊情况下,我没有理由甚至在第一时间产生线程。

而不是

B obj = new B(); 
Thread T = new Thread(obj); 
T.start(); 

你可以这样做:

new B().run(); 

使用连接,当你在开始和加入之间做一些更有用。

T.start(); 
//do some other work here 
T.join();